【发布时间】:2013-11-11 15:06:39
【问题描述】:
我正在尝试编写一个递归数组迭代器函数,该函数将返回由“$needle”指定的所有集合的结果集。 $needle = 钥匙
这是我的功能:
function recursive($needle, $array, $holder = array()) {
foreach ($array as $key => $value) {
if (gettype($value) == 'array') {
if ($key != $needle) {
recursive($needle, $value);
} elseif ($key == $needle) {
if (!empty($value)) {
array_push($holder, $value);
}
}
}
}
return $holder;
}
但如果我没有指定!empty($value),我并没有得到所有结果而是得到一些空结果,尽管输入数组没有任何空集。我做错了什么?
【问题讨论】:
-
array_walk_recursive 或 array_search 以及更多内置函数
-
我们需要一个示例数组和函数参数来触发您的错误。否则,无法复制问题。
-
看起来不完整的第一件事:您正在为 $holder 分配匹配项,但在从内部调用 recursive() 时,$holder 没有被传递,也没有被评估为返回值。
-
除了注释之外,您的轻描淡写的评论 “使用任何多维数组” 让我真正做到了,它证明了您的功能有效 - eval.in/private/236c41834864b6 - 所以至少有时: P - 你的具体问题是什么?
-
好吧,目前你的递归调用没有做任何事情。它的返回值被忽略并且它不会改变持有者。所以你的整个函数表现得好像只有
elseif分支在那里。