如果存在连续的相似字符串,则只打印一个字符串


print only one string if there is continuous similar strings

我有一个变量$b=substr($r['pon_port'],4,2);在foreach循环中。$b的变量转储给出了一个字符串列表,如下所示:

string(1) "0" string(1) "0" string(1) "0" string(1) "0" string(1) "0"
string(1) "1" string(1) "1" string(1) "1" string(1) "1" string(1) "1"
string(1) "2" string(1) "2" string(1) "2" string(1) "2" string(1) "2"
string(1) "3" string(1) "3" string(1) "3" string(1) "3" string(1) "3"
string(1) "4" string(1) "4" string(1) "4" string(1) "4" string(1) "4"
string(1) "0" string(1) "0" string(1) "0" string(1) "0" string(1) "0"
string(1) "1" string(1) "1" string(1) "1" string(1) "1" string(1) "1"

我想要的是,如果有类似的连续字符串,我只想有一个字符串>,例如:在上面的转储中。我只想要:

string(1) "0" 
string(1) "1" 
string(1) "2" 
string(1) "3" 
string(1) "4" 
string(1) "0" 
string(1) "1" 

如果我理解正确,你可以记住最后一个数字:

$lastB = null;
foreach ($foo as $r) //I'm guessing that $r is the dummy variable, based on your code
{
        $b = substr($r['pon_port'],4,2); //You wrote this
        //This part prevents repetitions from happening
        if ($lastB === null || $b != $lastB) var_dump($lastB = $b);
}

(在这种情况下,我把赋值偷偷地放进了争论中,用了var_dump($lastB = $b)而不是两个单独的语句。我觉得它更整洁,但如果你愿意,你可以把它们分开。)

如果你想做一些事情而不是打印变量,作为最终结果,你可以使用以下代码:

$lastB = null;
foreach ($foo as $r) //I'm guessing that $r is the dummy variable, based on your code
{
        $b = substr($r['pon_port'],4,2); //You wrote this
        //This part prevents repetitions from happening
        if ($lastB === null || $b != $lastB)
        {
            //do something with $b...
            $lastB = $b;
        }
}

我自己在序列"2 2 7 8 8 7"上尝试第一个代码,我得到了:

string(1) "2" string(1) "7" string(1) "8" string(1) "7"

我(可能是愚蠢的)基于上下文的假设是它们总是个位数。为了可读性,您可以将其单行:

$nums = array(0,0,1,2,2,3,4,0,1,2,2,1,2,1,2,3,3,4,4,4);
print_r($nums);
$nums = implode('',$nums);
$nums = preg_replace('~('d)((?='1).)+~','$1',$nums);
$nums = str_split($nums);
print_r($nums)

输出:

Array
(
    [0] => 0
    [1] => 0
    [2] => 1
    [3] => 2
    [4] => 2
    [5] => 3
    [6] => 4
    [7] => 0
    [8] => 1
    [9] => 2
    [10] => 2
    [11] => 1
    [12] => 2
    [13] => 1
    [14] => 2
    [15] => 3
    [16] => 3
    [17] => 4
    [18] => 4
    [19] => 4
)
Array
(
    [0] => 0
    [1] => 1
    [2] => 2
    [3] => 3
    [4] => 4
    [5] => 0
    [6] => 1
    [7] => 2
    [8] => 1
    [9] => 2
    [10] => 1
    [11] => 2
    [12] => 3
    [13] => 4
)