Break не работает должным образом после возврата true;

Возвращение правда; не завершает текущий цикл функции!
Это так просто, но я не понимаю, почему перерыв не работает!

Я пытаюсь этот кусок кода:

function findKey($array, $keySearch) {
foreach ($array as $key => $item){
echo "$key == $keySearch";
if ("$key" == "$keySearch"){
echo 'yes, it exists';
return true;
}
else
{
if (is_array($item))
findKey($item, $keySearch);
}
}
return false;
}

return true; никогда не ломаться, как это отпустило после yes, it exists повторяется!

решаемая

Сам код из принятого решения Вот был неправ. Это было исправлено. Также ниже вы найдете правильный ответ.

0

Решение

Вы пришли к выводу. На самом деле, ваш return true является конечно немедленное завершение функции (включая выход из цикла), но это только завершает текущий вызов функции. Ваше решение является рекурсивным и содержит ошибку в else предложение, в результате которого результат рекурсивного вызова findKey полностью игнорируется. Таким образом, все, что происходит внутри этого вызова, не имеет никакого эффекта.

Вы видите echo от вашего внешнего вызова функции.

Я полагаю, что вы действительно хотели написать это:

function findKey($array, $keySearch)
{
foreach ($array as $key => $item) {
echo "$key == $keySearch";
if ($key == $keySearch) {
echo 'yes, it exists';
return true;
}
else {
if (is_array($item) && findKey($item, $keySearch))
return true;
}
}

return false;
}

Я изменил исходный ответ, который вы нашли.

2

Другие решения

Других решений пока нет …