вывести только одну строку, если есть непрерывные похожие строки

php string loops

95 просмотра

2 ответа

521 Репутация автора

У меня есть переменная $ b = substr ($ r ['pon_port'], 4,2); в цикле foreach. Var dump $ 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" 
Автор: Sujan Shrestha Источник Размещён: 18.07.2016 07:31

Ответы (2)


0 плюса

754 Репутация автора

Если я вас правильно понимаю, вы можете выполнить это, помня последний номер:

$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"
Автор: Max Размещён: 18.08.2016 05:31

0 плюса

28297 Репутация автора

Мое (возможно, глупое) предположение, основанное на контексте, состоит в том, что они всегда представляют собой однозначные числа. Вы можете сделать это одной строкой, но для удобства чтения:

$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
)
Автор: Crayon Violent Размещён: 18.08.2016 05:46
32x32