【问题标题】:print only one string if there is continuous similar strings如果有连续的相似字符串,则只打印一个字符串
【发布时间】:2016-11-20 17:16:01
【问题描述】:

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

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" 

【问题讨论】:

  • 如果相同的值像"0 0 1 0 2 1 2 ..." 一样以随机顺序出现怎么办?
  • @Mureinik 我尝试将唯一值推送到空数组。但是如果相同的数字连续出现在两个不同的地方,比如 0 0 0 0 1 1 1 2 2 2 2 0 0 0 。我只能得到 0 1 2。我想要什么我 0 1 2

标签: php string loops


【解决方案1】:

我基于上下文的(可能是愚蠢的)假设是它们始终是个位数。您可以将其添加 1 行,但为了便于阅读:

$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
)

【讨论】:

    【解决方案2】:

    如果我理解正确,您可以记住最后一个数字来完成此操作:

    $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"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多