如何在 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);
?>