Размещено: 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, вложенные циклы