【问题标题】:Finding the deepest child of each parent in an array using php使用php在数组中查找每个父母的最深的孩子
【发布时间】:2020-10-31 22:10:41
【问题描述】:

我希望你做得很好。 最近在练习PHP的时候遇到了一个问题。

给定数组如下:

$arr = array(
    "P1"=>array(
        "C1"=>array(
            "C11"=>array(),
            "C12"=>array(
                "C121"=>array()
            )
        )
    ),
    "P2"=>array(
        "D1"=>array(
            "D11"=>array(
                "D121"=>array(),
                "D122"=>array(
                    "D1221"=>array()
                )
            ),
            "D12"=>array()
        )
    ),
    "P3"=>array()
);

我们必须找到每个父母中最深的孩子。 示例输出如下:

P1 => C121
P2 => D1221
P3 =>

我对 PHP 非常陌生,因此非常感谢您的投入。

【问题讨论】:

  • 您已经确定递归是相关的(因为您已将其添加为标签),那么您是否研究过如何解决问题?
  • 我已经尝试过递归,这似乎是可行的方法,但是我一直以所有空数组结束

标签: php recursion multidimensional-array


【解决方案1】:

递归(一个调用自身的函数)是解决问题的方法。

我在这里使用的是一组键并保存深度级别。越高,越深。最后,我将数组(按值)向后排序并返回第一个键名(最深的)或空的,如果没有的话。

foreach($array as $key => $value) {
    echo $key, ' => ', findDeepestChild($value), PHP_EOL;
}

function findDeepestChild(array $array, int $level = 0): string {
    $keys = [];
    foreach($array as $key => $value) {
        $keys[$key] = $level;
        if(!is_array($value)) continue;
        if(!empty($value)) return findDeepestChild($value, ++$level);
    }
    arsort($keys);
    return array_key_first($keys) ?? '';
}

给出的输出

P1 => C121
P2 => D1221
P3 =>

【讨论】:

  • 谢谢你。我刚刚开始学习 PHP,事实证明它比我想象的要难。你还能建议一些对我有更好帮助的东西吗?再次感谢您!
  • 递归对我们的大脑来说很难,因为我们以线性方式思考和编码。这个答案可能会被简化,但并不那么容易阅读。这是PHP recursion 的一个很好的指南。
  • 我已经能够轻松地用其他语言进行递归,但 php 无法与我一起工作。无论如何,谢谢!
  • 如果有什么不清楚的地方或者我应该更详细的解释,请告诉我。
  • 不,没关系。非常感谢!这是非常不言自明的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-19
  • 2015-10-15
  • 1970-01-01
  • 2020-03-30
相关资源
最近更新 更多