Please document this method. I have found a use for it and would love to better understand how it works. TY : )
(PHP 5, PHP 7, PHP 8)
RecursiveIteratorIterator::getSubIterator — The current active sub iterator
Bu işlev hala belgelendirilmemiştir; sadece bağımsız değişken listesi mevcuttur.
level
The current active sub iterator on success; null
on failure.
Sürüm: | Açıklama |
---|---|
8.0.0 |
level is now nullable.
|
Please document this method. I have found a use for it and would love to better understand how it works. TY : )
$testArray = [
'a' => [
'b' => [
'c' => 1
],
'd' => [
'e' => [
'f' => 2
]
]
]
];
$modes = [
'LEAVES_ONLY' => \RecursiveIteratorIterator::LEAVES_ONLY,
'SELF_FIRST' => \RecursiveIteratorIterator::SELF_FIRST,
'CHILD_FIRST' => \RecursiveIteratorIterator::CHILD_FIRST
];
function logIteratorTraversal(\RecursiveIteratorIterator $iterator, string $modeName)
{
$maxDepth = 0;
$log = [];
foreach ($iterator as $key => $value) {
$currentDepth = $iterator->getDepth();
$maxDepth = max($maxDepth, $currentDepth);
// 构建路径
$path = [];
for ($i = 0; $i <= $currentDepth; $i++) {
$sub = $iterator->getSubIterator($i);
$path[] = $sub->key();
}
$log[] = sprintf(
"模式: %-11s | 当前深度: %d | 路径: %-16s | 类型: %s",
$modeName,
$currentDepth,
implode('→', $path),
is_array($value) ? '非叶子节点' : '叶子节点'
);
}
echo "=== {$modeName} 模式遍历日志 ===\n";
echo implode("\n", $log);
echo "\n最大实际深度:" . ($maxDepth + 1) . "\n\n";
}
foreach ($modes as $name => $mode) {
$iterator = new \RecursiveIteratorIterator(
new \RecursiveArrayIterator($testArray),
$mode,
\RecursiveIteratorIterator::CATCH_GET_CHILD
);
logIteratorTraversal($iterator, $name);
}
=== LEAVES_ONLY 模式遍历日志 ===
模式: LEAVES_ONLY | 当前深度: 2 | 路径: a→b→c | 类型: 叶子节点
模式: LEAVES_ONLY | 当前深度: 3 | 路径: a→d→e→f | 类型: 叶子节点
最大实际深度:4
=== SELF_FIRST 模式遍历日志 ===
模式: SELF_FIRST | 当前深度: 0 | 路径: a | 类型: 非叶子节点
模式: SELF_FIRST | 当前深度: 1 | 路径: a→b | 类型: 非叶子节点
模式: SELF_FIRST | 当前深度: 2 | 路径: a→b→c | 类型: 叶子节点
模式: SELF_FIRST | 当前深度: 1 | 路径: a→d | 类型: 非叶子节点
模式: SELF_FIRST | 当前深度: 2 | 路径: a→d→e | 类型: 非叶子节点
模式: SELF_FIRST | 当前深度: 3 | 路径: a→d→e→f | 类型: 叶子节点
最大实际深度:4
=== CHILD_FIRST 模式遍历日志 ===
模式: CHILD_FIRST | 当前深度: 2 | 路径: a→b→c | 类型: 叶子节点
模式: CHILD_FIRST | 当前深度: 1 | 路径: a→b | 类型: 非叶子节点
模式: CHILD_FIRST | 当前深度: 3 | 路径: a→d→e→f | 类型: 叶子节点
模式: CHILD_FIRST | 当前深度: 2 | 路径: a→d→e | 类型: 非叶子节点
模式: CHILD_FIRST | 当前深度: 1 | 路径: a→d | 类型: 非叶子节点
模式: CHILD_FIRST | 当前深度: 0 | 路径: a | 类型: 非叶子节点
最大实际深度:4