如何解决如何在PHP中的一个字符串中找到几个不同字符串的第一次出现
我有一个字符串,它总是以许多 As、Bs 或 Cs 开头,然后在某一时刻更改为 Ns、Ss 和 Ts。我需要找到它发生变化的位置并将其分开。
Examples: "AAABCBACAANNNTTT","BCBATTNTT","AAABCBACAASSSSSS"
Output I want: "AAABCBACAA","NNNTSTT"; "BCBA","TTNTT"; "AAABCBACAA","SSSSSS"
当然,如果只有一个字母,那么使用 strpos 很容易找到拆分的位置,例如:
$string = "AAABCBACAANNNTTT";
echo(strpos($string,"S")); //Return: 13
为了使用 3 个字母,我尝试了以下操作:
$string = "AAABCBACAANNNTTT";
echo(min(strpos($string,"N"),strpos($string,"S"),"T"))); //Return:
问题在于当字符串中不存在字母时,它会给出一个空结果。
我也发现了一个类似的问题,但“最佳答案”实际上并不起作用,就像答案注释中的 2 位评论者一样:
Find position first occurence of an array of strings in a string
解决方法
您可以使用 strpos 和 min 函数来实现:
function str_array_pos($string,$array) {
$pos = strlen($string);
foreach($array as $char) {
if($p = strpos($string,$char)) {
$pos = min($pos,$p);
}
}
return $pos < strlen($string) ? $pos : false;
}
这将通过查找每个提供的字符的位置来为您提供拆分位置,如果字符串中没有任何字符,则返回最小位置或 false。
输入数组:["N","S","T"]
输入字符串:"AAABCBACAANNNTTT","BCBATTNTT","AAABCBACAASSSSSS"
输出:10,4,10
如果您想保留您提出的结构,这可能会奏效:
<?php
$string = "AAABCBACAANNNTTT";
$first = (min(strpos($string,"N") ?: PHP_INT_MAX,strpos($string,"S") ?: PHP_INT_MAX,"T") ?: PHP_INT_MAX));
$str1 = substr($string,$first);
$str2 = substr($string,$first);
?>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。