函数名: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循环遍历迭代器,并根据深度来确定当前元素是类别还是项目。