PHP - 递归多维数组迭代器 [英] PHP - Recursive Multidimension Array iterator
问题描述
我正在尝试编写一个递归数组迭代器函数,该函数将返回由$needle"指定的所有集合的结果集.$needle = key
I'm trying to write a recursive array iterator function in which the function will return a result set of all sets that are specified by '$needle'. Where $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;
}
但是如果我没有指定 !empty($value)
,我不会得到所有的结果,而是得到一些空的结果,尽管输入数组没有任何空集.我做错了什么?
But I'm not getting all the results back and instead get a few empty results, if I don't specify the !empty($value)
, although the input array does not have any empty sets. What am I doing wrong?
推荐答案
你不需要重新发明轮子,因为 PHP 有标准的 递归迭代器 API:
You don't need to reinvent the wheel since PHP has standard Recursive Iterator 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;
}
}
-注意,因为您正在按键搜索值-通常情况下 $value
将包含整个小节.
-note, that, since you're searching for value by key - in common case $value
will hold entire subsection.
如果你想在你自己的递归函数中做到这一点,这里有一个:
If you want to do this in your own recursive function, here's one:
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;
}
这篇关于PHP - 递归多维数组迭代器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!