<?php
$sections = ['test', 'nesto', 'fo', 'bar', ['obama', 'tito']];
function search($sections, $query){
$found = false;
foreach ($sections as $section){
if ($section == $query){
$found = true;
var_dump($found);
return $found;
}
if (is_array($section)){
search($section, $query);
}
}
var_dump($found);
return $found;
}
if (search($sections, 'obama')){
echo 'search item found';
}else{
echo 'nothing found';
}
我写了我的问题的简化版本。基本上,我试图在嵌套数组中找到一个值。我得到以下输出:bool(true)bool(false)找不到任何内容。为什么发现值从true变为false。为什么在$ section == $ query时函数不终止?
答案 0 :(得分:-1)
尝试一下
$sections = ['test', 'nesto', 'fo', 'bar', ['obama', 'tito']];
function search($sections, $query){
$found = false;
foreach ($sections as $section){
if ($section == $query){
$found = true;
var_dump($found);
return $found;
}
if (is_array($section)){
return search($section, $query); //add return here
}
}
var_dump($found);
return $found;
}
if (search($sections, 'obama')){
echo 'search item found';
}else{
echo 'nothing found';
}
您必须返回递归调用的结果。
输出
bool(true)
search item found
您是[-]
亲密朋友,大声笑。
您也可以这样:
$found = search($section, $query);
然后让函数末尾的return捕获它。你的选择。可以将其视为一堆函数调用(因为这就是函数调用)。您必须将结果返回整个堆栈,以便它可以从第一次调用(发生输出的位置)返回。
干杯!