函數(shù)名:RecursiveIterator::getChildren()
適用版本:PHP 5 >= 5.1.0, PHP 7
函數(shù)描述:該函數(shù)用于獲取當(dāng)前迭代器的子迭代器。
用法: RecursiveIterator::getChildren(): RecursiveIterator|false
參數(shù): 該函數(shù)沒(méi)有參數(shù)。
返回值: 如果當(dāng)前迭代器有子迭代器,則返回一個(gè)實(shí)現(xiàn)了RecursiveIterator接口的子迭代器實(shí)例;如果當(dāng)前迭代器沒(méi)有子迭代器,則返回false。
示例:
class MyRecursiveIterator extends RecursiveArrayIterator
{
public function hasChildren()
{
// 判斷當(dāng)前迭代器是否有子迭代器
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";
}
}
輸出結(jié)果:
Category: fruit
Item: apple
Item: banana
Item: orange
Item: juicy
Item: sweet
Category: veggie
Item: carrot
Item: pea
Item: broccoli
在上面的示例中,我們首先創(chuàng)建了一個(gè)自定義的迭代器類(lèi)MyRecursiveIterator,該類(lèi)繼承自RecursiveArrayIterator,并重寫(xiě)了hasChildren()方法來(lái)判斷當(dāng)前迭代器是否有子迭代器。然后,我們使用該自定義迭代器類(lèi)來(lái)構(gòu)造一個(gè)RecursiveIteratorIterator實(shí)例。通過(guò)使用RecursiveIteratorIterator::SELF_FIRST選項(xiàng),我們可以按照自上而下的順序遍歷多維數(shù)組。最后,我們使用foreach循環(huán)遍歷迭代器,并根據(jù)深度來(lái)確定當(dāng)前元素是類(lèi)別還是項(xiàng)目。