dud*_*pig 8 php arrays recursion
我正在尝试编写一个递归数组迭代器函数,其中函数将返回由'$ needle'指定的所有集合的结果集.其中$ needle = key
这是我的功能:
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;
}
Run Code Online (Sandbox Code Playgroud)
但是我没有得到所有结果,而是得到一些空结果,如果我没有指定!empty($value)
,虽然输入数组没有任何空集.我究竟做错了什么?
Alm*_* Do 17
因为PHP具有标准的递归迭代器 API,所以您不需要重新发明轮子:
//$array is your multi-dimensional array
$result = [];
$search = 'foo';
$iterator = new RecursiveIteratorIterator(
new RecursiveArrayIterator(
$array,
RecursiveArrayIterator::CHILD_ARRAYS_ONLY
)
);
foreach($iterator as $key=>$value)
{
if($search==$key && $value!=='')
{
$result[] = $value;
}
}
Run Code Online (Sandbox Code Playgroud)
- 注意,因为你是按键搜索价值- 通常情况下$value
会持有整个小节.
如果你想在你自己的递归函数中这样做,这里有一个:
function recursive($needle, $array, $holder = [])
{
$holder = [];
foreach($array as $key=>$value)
{
if($key===$needle && $value!=='')
{
$holder = array_merge($holder, [$value]);
}
if(is_array($value))
{
$holder = array_merge($holder, recursive($needle, $value, $holder));
}
}
return $holder;
}
Run Code Online (Sandbox Code Playgroud)