我有一个多维数组,如下所示:
array (
0 => array ( 'text' => 'LEVEL 0-0', 'children' =>
array (
0 => array ( 'text' => 'LEVEL 1-0 0', 'children' =>
array (
0 => array ( 'text' => 'LEVEL 2-0 0', 'children' =>
array (
0 => array ( 'text' => 'LEVEL 3-0 0', ),
1 => array ( 'text' => 'LEVEL 3-1 0', ),
2 => array ( 'text' => 'LEVEL 3-2 0', ),
3 => array ( 'text' => 'LEVEL 3-3 0', ),
4 => array ( 'text' => 'LEVEL 3-4 0', ),
5 => array ( 'text' => 'LEVEL 3-5 0', ), ), ),
1 => array ( 'text' => 'LEVEL 2-1 0', ),
2 => array ( 'text' => 'LEVEL 2-2 0', 'children' =>
array (
0 => array ( 'text' => 'LEVEL 3-0 2', ), ), ),
3 => array ( 'text' => 'LEVEL 2-3 0', ),
4 => array ( 'text' => 'LEVEL 2-4 0', ),
5 => array ( 'text' => 'LEVEL 2-5 0', 'children' =>
array (
0 => array ( 'text' => 'LEVEL 3-0 5', ),
1 => array ( 'text' => 'LEVEL 3-1 5', ),
2 => array ( 'text' => 'LEVEL 3-2 5', ),
3 => array ( 'text' => 'LEVEL 3-3 5', ),
4 => array ( 'text' => 'LEVEL 3-4 5', ),
5 => array ( 'text' => 'LEVEL 3-5 5', ), ), ),
6 => array ( 'text' => 'LEVEL 2-6 0', ),
7 => array ( 'text' => 'LEVEL 2-7 0', ), ), ),
),
),
)如何计数和检查数组是否是数组中的最终数组?
假设我们有一个计数器$i = 0;。
每当数组有子数组时,我们都希望计数器增量。
if (!empty($value['children'])) { $i++; }
每当我们到达数组中的最终数组时,我们都希望计数器减少。
伪码if (final array in array) { $i--; }
我们的尾数应该是$i = 0;。
发布于 2019-11-25 23:56:09
在迭代数组之前,可以使用array_key_last()查找数组中最后一个元素的键。这可以应用于任意数量的数组维度。
此示例将输出示例树中每个节点的文本,并指示该节点是否为最终数组元素。
function listElements(array $input)
{
$final = array_key_last($input);
$n = count($input);
foreach ($input as $key => $element) {
echo $element['text'], ($key == $final) ? " last of $n" : '', PHP_EOL;
if (isset($element['children'])) {
listElements($element['children']);
}
}
}(这使用的方法与最近更新的this answer对建议的重复使用的方法相同。我只是在这里演示,当递归应用时,它仍然可以工作。)
根据您的编辑,您所指的$i似乎对应于递归深度。您可以通过将深度添加到函数签名中并在递归调用中递增来跟踪这一点。下面是一个用end()/key()而不是array_key_last()使用PHP5.6语法的示例。
function listElements(array $input, $depth = 0)
{
end($input);
$final = key($input);
$n = count($input);
foreach ($input as $key => $element) {
echo $element['text'];
echo ($key == $final) ? " last of $n," : '';
echo " depth $depth", PHP_EOL;
if (isset($element['children'])) {
listElements($element['children'], $depth + 1);
}
}
}https://stackoverflow.com/questions/59040631
复制相似问题