Возвращение правда; не завершает текущий цикл функции!
Это так просто, но я не понимаю, почему перерыв не работает!
Я пытаюсь этот кусок кода:
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
повторяется!
решаемая
Сам код из принятого решения Вот был неправ. Это было исправлено. Также ниже вы найдете правильный ответ.
Вы пришли к выводу. На самом деле, ваш 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;
}
Я изменил исходный ответ, который вы нашли.
Других решений пока нет …