English | 简体中文 | 繁體中文
查询

RecursiveIterator::getChildren()函数—用法及示例

「 获取当前迭代器的子迭代器 」


函数名:RecursiveIterator::getChildren()

适用版本:PHP 5 >= 5.1.0, PHP 7

函数描述:该函数用于获取当前迭代器的子迭代器。

用法: RecursiveIterator::getChildren(): RecursiveIterator|false

参数: 该函数没有参数。

返回值: 如果当前迭代器有子迭代器,则返回一个实现了RecursiveIterator接口的子迭代器实例;如果当前迭代器没有子迭代器,则返回false。

示例:

class MyRecursiveIterator extends RecursiveArrayIterator
{
    public function hasChildren()
    {
        // 判断当前迭代器是否有子迭代器
        return is_array($this->current());
    }
}

$array = [
    'fruit' => [
        'apple',
        'banana',
        'orange' => [
            'juicy',
            'sweet',
        ],
    ],
    'veggie' => [
        'carrot',
        'pea',
        'broccoli',
    ],
];

$iterator = new RecursiveIteratorIterator(new MyRecursiveIterator($array), RecursiveIteratorIterator::SELF_FIRST);

foreach ($iterator as $key => $value) {
    if ($iterator->getDepth() === 0) {
        echo "Category: $key\n";
    } else {
        echo str_repeat('    ', $iterator->getDepth()) . "Item: $value\n";
    }
}

输出结果:

Category: fruit
    Item: apple
    Item: banana
    Item: orange
        Item: juicy
        Item: sweet
Category: veggie
    Item: carrot
    Item: pea
    Item: broccoli

在上面的示例中,我们首先创建了一个自定义的迭代器类MyRecursiveIterator,该类继承自RecursiveArrayIterator,并重写了hasChildren()方法来判断当前迭代器是否有子迭代器。然后,我们使用该自定义迭代器类来构造一个RecursiveIteratorIterator实例。通过使用RecursiveIteratorIterator::SELF_FIRST选项,我们可以按照自上而下的顺序遍历多维数组。最后,我们使用foreach循环遍历迭代器,并根据深度来确定当前元素是类别还是项目。

补充纠错
热门PHP函数
分享链接