Размещено: 2023-12-11 15:56:02

Теги: php

ОСТАНОВКА РОДИТЕЛЬСКОГО ЦИКЛА ИЗ ВЛОЖЕННОГО ЦИКЛА

Для того, чтобы выйти из вложенных циклов на PHP(for, foreach, while, do-while или switch) нужно использовать: break количество вложенных циклов, которые нужно прервать; break принимает необязательный числовой аргумент, который сообщает ему выполнение какого количества вложенных структур необходимо прервать. Значение по умолчанию 1, только ближайшая структура будет прервана. Тогда код будет выглядеть следующим образом:

$json='{"1":{"e":["10","11"],"w":["80","80"]},"2":{"e":["5","6"],"w":["40","40"]},"3":{"e":["4","4"],"w":["30","30"]}}';
$json=json_decode($json, true);
print_r($json);

echo "\n"."============================================================================================================="."\n";

foreach($json as $j)
{
    foreach($j as $i)
    {
        foreach($i as $ii)
        {
            echo $ii."\n";
            if($ii==40) break(3); //Либо break 3;
        }
    }
}

Результат выполнения кода будет следующим:

Array
(
    [1] => Array
        (
            [e] => Array
                (
                    [0] => 10
                    [1] => 11
                )

            [w] => Array
                (
                    [0] => 80
                    [1] => 80
                )

        )

    [2] => Array
        (
            [e] => Array
                (
                    [0] => 5
                    [1] => 6
                )

            [w] => Array
                (
                    [0] => 40
                    [1] => 40
                )

        )

    [3] => Array
        (
            [e] => Array
                (
                    [0] => 4
                    [1] => 4
                )

            [w] => Array
                (
                    [0] => 30
                    [1] => 30
                )

        )

)

=============================================================================================================
10
11
80
80
5
6
40

При этом это работает только если указывается из цикла. Если break будет в какой-то вложенной функции, то он остановит абсолютно всё и функцию и все циклы. Допустим пример:

function f1($num){
    echo 'f1:'.$num.'<br>';
    f2($num);
}


function f2($num){
    echo 'f2:'.$num.'<br>';
    if($num==2) break 2; //Независимо установлен ли break 1; или break 2; останавливает абсолютно всё - оба цикла 
}


foreach(range(0,2) as $test)
{
    echo '<br>========================= foreach 1 ===============================<br>';
    foreach(range(0,10) as $n)
    {
        echo 'foreach2:'.$n.'<br>';
        f1($n);
        
        if($n==2) break 2; //Корректно работает и останавливает только то что нужно, можно указать break 1; или break 2; и это будет работать
    }
}

Поэтому если цель прервать цикл функцией, то необходимо использовать в функции return false; а уже в самом цикле обрабатывать это и делать break;


На эту страницу чаще всего попадают по запросам: break, вложенные циклы