return true 后中断不能正常工作;
Break is not working properly after return true;
return 真;没有结束当前的函数循环!
这是非常基本的,但我不明白为什么 break 不起作用!
我试试这段代码:
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
被回显后就放手了!
已解决
已接受的解决方案 here 中的代码本身是错误的。它已被纠正。此外,您将在下面找到正确答案。
你已经下了结论。事实上,你的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;
}
我已对您找到的原始答案进行了相同的更改。
return 真;没有结束当前的函数循环! 这是非常基本的,但我不明白为什么 break 不起作用!
我试试这段代码:
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
被回显后就放手了!
已解决
已接受的解决方案 here 中的代码本身是错误的。它已被纠正。此外,您将在下面找到正确答案。
你已经下了结论。事实上,你的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;
}
我已对您找到的原始答案进行了相同的更改。