我不明白为什么"返回"我没有停止在我创建的函数中的过程来搜索PHP中的multi_level数组上的值。 这是代码:
static function in_array_multi($needle, $haystack) {
foreach ($haystack as $item) {
if(is_array($item)){
in_array_multi($needle, $item);
}
else{
if ($item === $needle) {
return "ok";
}
}
}
return "nok";
}
我使用这个数组作为例子:
$arr = array(0 => array(id=>1,name=>"cat 1"),
1 => array(id=>2,name=>"cat 2"),
2 => array(id=>3,name=>array(id=>7,name=>"cat 7"))
);
我正在调用这样的函数:
echo in_array_multi("cat 1",$arr);
它正在回归" nok"。 我正在使用xdebug来跟踪这个过程。它应该在第二轮停止进程。 有人知道发生了什么事吗? 谢谢
答案 0 :(得分:1)
因为你使函数返回将停止循环,你应该收集它并在最后返回。
也许你想要这个..
function array_multiple_search($array, $key, $value=null) {
$return = array();
if (is_array($array)) {
if (isset($array[$key])) {
if (is_null($value)) {
$return[] = $array;
} elseif ($array[$key] == $value) {
$return[] = $array;
}
}
foreach ($array as $subarray) {
$return = array_merge($return, array_multiple_search($subarray, $key, $value));
}
}
return $return;
}
param 1是目标数组
param 2是您要搜索目标数组的键
param 3是您要使用目标数组的键搜索的值(可以为null)
此函数将收集并返回一组合格的数据。
答案 1 :(得分:1)
我的评论有点粗心。如果递归实际找到值,您只想直接从递归返回。你可以做到
function in_array_multi($needle, $haystack) {
foreach ($haystack as $item) {
if(is_array($item)){
if ('ok' === in_array_multi($needle, $item)) {
return 'ok';
}
}
elseif ($item === $needle) {
return "ok";
}
}
return "nok";
}