【问题标题】:Count all values in nested arrays using recursion in PHP在 PHP 中使用递归计算嵌套数组中的所有值
【发布时间】:2021-04-13 13:44:06
【问题描述】:

我想学习如何使用递归函数,所以我开始创建一个:

<?php
$tableau = [[[[2],[2]],[[2],[2]]],[[[2],[2]],[[2],[2]]]];
function test_count_recursive($tab, $compte = 0){
    foreach($tab as $ss_tab){
        if(!is_array($ss_tab)){
            $compte += 1;
        }
        else{
            test_count_recursive($ss_tab, $compte);
        }
    }
    return $compte;
}

echo test_count_recursive($tableau);

但它不起作用,你能告诉我为什么吗?

【问题讨论】:

  • 您返回的 $compte 但没有使用它。

标签: php arrays recursion


【解决方案1】:

通常,您将一条数据向上或向下传递递归调用树,而不是同时传递。在这种情况下,您不需要向下传递父值。只需返回计数,让父节点累加即可:

<?php

function test_count_recursive($tab /* one param only */) {
    $compte = 0; // <-- store the local total for this node

    foreach ($tab as $ss_tab) {
        if (is_array($ss_tab)) {
            $compte += test_count_recursive($ss_tab /* one param only */);
            // ^^^^^^^ accumulate total from children
        }
        else {
            $compte++;
        }
    }

    return $compte;
}

$tableau = [[[[2],[2]],[[2],[2]]],[[[2],[2]],[[2],[2]]]];   
echo test_count_recursive($tableau); // => 8

【讨论】:

  • 谢谢你,这暂时感觉非常违反直觉,但它是完美的。
  • 没问题。根据经验,“向上传递结果,向下传递上下文数据”。给定函数调用框架的逻辑是“我计算我的本地总数,我会要求我的每个孩子计算他们的总数并告诉我,这样我就可以将其添加到我的总数中”。对于每次调用,上下文/父总数是什么无关紧要,只有他们需要担心计数的数组的子树。另外,如果您还没有,请不要忘记查看someone answers
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-06-28
  • 1970-01-01
  • 2015-01-30
  • 1970-01-01
  • 2017-02-02
  • 1970-01-01
  • 2022-07-06
相关资源
最近更新 更多