如何在 PHP 中的字符串中找到几个不同字符串的第一次出现
How to find the first occurance of a few different Strings in a String in PHP
我有一个字符串,它总是以许多 A、B 或 C 开头,然后在某一时刻更改为 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"), strpos($string, "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;
}
这将通过查找每个提供的字符的位置和 return 最小位置为您提供拆分位置,如果字符串中有 none 个字符,则返回 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, strpos($string, "T") ?: PHP_INT_MAX));
$str1 = substr($string, 0, $first);
$str2 = substr($string, $first);
?>
我有一个字符串,它总是以许多 A、B 或 C 开头,然后在某一时刻更改为 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"), strpos($string, "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;
}
这将通过查找每个提供的字符的位置和 return 最小位置为您提供拆分位置,如果字符串中有 none 个字符,则返回 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, strpos($string, "T") ?: PHP_INT_MAX));
$str1 = substr($string, 0, $first);
$str2 = substr($string, $first);
?>