Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 递归数组计数器当前数组_Php_Arrays - Fatal编程技术网

Php 递归数组计数器当前数组

Php 递归数组计数器当前数组,php,arrays,Php,Arrays,我正在尝试获取整个当前数组,但我认为我没有采取正确的方法,因为有时会出现未定义的索引错误 $iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($comments_array), RecursiveIteratorIterator::SELF_FIRST); while ($iterator->valid()) { if ($iterator->hasChildren(

我正在尝试获取整个当前数组,但我认为我没有采取正确的方法,因为有时会出现未定义的索引错误

    $iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($comments_array), RecursiveIteratorIterator::SELF_FIRST);
    while ($iterator->valid()) {
        if ($iterator->hasChildren()) {
            $row = $iterator->getChildren();
            $depth = $iterator->getDepth();
            echo $row['User_ID'] . "<br>";
        }
        $iterator->next();
    }
$iterator=new recursiveiterator(new RecursiveArrayIterator($comments\u array),recursiveiterator::SELF\u FIRST);
而($iterator->valid()){
如果($iterator->hasChildren()){
$row=$iterator->getChildren();
$depth=$iterator->getDepth();
echo$row['User_ID']。“
”; } $iterator->next(); }
我知道你可以做
foreach($iterator->getChildren()as$key=>$value)
但这对我没有帮助,因为我想要整个数组


希望这有意义

我经常使用过滤迭代器来处理这类任务,而不是使用一些疯狂的嵌套
if
块。通常情况下,像这样的任务可以抽象为更通用的东西——不仅仅适用于这个数组/循环——这就是我在这里采用的方法

正因为如此,下面的答案不是最简单、最快或最小的代码更改,无法完成任务。然而,它可能在其他地方对您自己或任何想要使用任何类型的递归迭代器执行类似操作的人有用


因此,任务归结为如何只获取迭代器(或数组)的父级而不获取父级的父级?一种方法是使用过滤迭代器,如下所示:

class FirstParentIterator extends FilterIterator {
    public function __construct(RecursiveIterator $iterator) {
        parent::__construct(
            new RecursiveIteratorIterator(
                new ParentIterator($iterator),
                RecursiveIteratorIterator::SELF_FIRST
            )
        );
    }
    public function accept() {
        // Only accept immediate parents of leaf elements
        return $this->hasChildren() && ! $this->getChildren()->hasChildren();
    }
}

使用这样的过滤器可以使原始循环更加整洁:

$iterator = new FirstParentIterator(new RecursiveArrayIterator($comments_array));
foreach ($iterator as $row) {
    echo $row['User_ID'] . "<br>";
}
$iterator=newfirstparentiterator(newrecursivearrayiiterator($comments_array));
foreach($iterator作为$row){
echo$row['User_ID']。“
”; }
我经常使用过滤迭代器处理此类任务,而不是使用一些疯狂的嵌套
if
块。通常情况下,像这样的任务可以抽象为更通用的东西——不仅仅适用于这个数组/循环——这就是我在这里采用的方法

正因为如此,下面的答案不是最简单、最快或最小的代码更改,无法完成任务。然而,它可能在其他地方对您自己或任何想要使用任何类型的递归迭代器执行类似操作的人有用


因此,任务归结为如何只获取迭代器(或数组)的父级而不获取父级的父级?一种方法是使用过滤迭代器,如下所示:

class FirstParentIterator extends FilterIterator {
    public function __construct(RecursiveIterator $iterator) {
        parent::__construct(
            new RecursiveIteratorIterator(
                new ParentIterator($iterator),
                RecursiveIteratorIterator::SELF_FIRST
            )
        );
    }
    public function accept() {
        // Only accept immediate parents of leaf elements
        return $this->hasChildren() && ! $this->getChildren()->hasChildren();
    }
}

使用这样的过滤器可以使原始循环更加整洁:

$iterator = new FirstParentIterator(new RecursiveArrayIterator($comments_array));
foreach ($iterator as $row) {
    echo $row['User_ID'] . "<br>";
}
$iterator=newfirstparentiterator(newrecursivearrayiiterator($comments_array));
foreach($iterator作为$row){
echo$row['User_ID']。“
”; }
是否有任何特殊需要递归迭代数组(换句话说,注释数组的结构是什么)?@salath谢谢,我将很快发布一个答案(数组键将与此问题中的键相关,而不是在你的粘贴中,以帮助其他人在此处浏览)发布答案,抱歉花了这么长时间,工作碍事。:)是否有任何特殊需要递归地迭代数组(换句话说,注释数组的结构是什么)?@salase谢谢,我将很快发布一个答案(数组键将与此问题中的键相关,而不是在您的粘贴中,以帮助其他人浏览此处)发布答案,抱歉花费了这么长时间,工作碍事。:)