【问题标题】:PHP: Looping through array doesn't update values in array as expectedPHP:遍历数组不会按预期更新数组中的值
【发布时间】:2020-11-29 04:18:52
【问题描述】:

我有以下数组。我想要的是一个分层数组,这样顶部(0级)的人将拥有一个名为“children”的新键,每个人都向他们报告(基于离线line_manager_number)

Array
(
    [58175] => Array
        (
            [number] => 58175
            [level] => 0
            [name] => Adam
            [line_manager_number] => 57900
        )

    [58202] => Array
        (
            [level] => 1
            [name] => Brian
            [line_manager_number] => 58175
        )

    [57127] => Array
        (
            [level] => 1
            [name] => Claire
            [line_manager_number] => 58175
        )

    [50136] => Array
        (
            [level] => 1
            [name] => David
            [line_manager_number] => 58175
        )

    [52862] => Array
        (
            [level] => 1
            [name] => Edward
            [line_manager_number] => 58175
        )

    [54975] => Array
        (
            [level] => 1
            [name] => Fred
            [line_manager_number] => 58175
        )

    [50164] => Array
        (
            [level] => 1
            [name] => Gail
            [line_manager_number] => 58175
        )

    [51970] => Array
        (
            [level] => 1
            [name] => Helen
            [line_manager_number] => 58175
        )

    [54648] => Array
        (
            [level] => 2
            [name] => India
            [line_manager_number] => 50136
        )

    [51306] => Array
        (
            [level] => 2
            [name] => Jane
            [line_manager_number] => 50136
        )

    [55819] => Array
        (
            [level] => 2
            [name] => Karen
            [line_manager_number] => 50136
        )

    [54963] => Array
        (
            [level] => 2
            [name] => Larry
            [line_manager_number] => 52862
        )

    [55252] => Array
        (
            [level] => 2
            [name] => Mike
            [line_manager_number] => 52862
        )

    [57774] => Array
        (
            [level] => 2
            [name] => Nigel
            [line_manager_number] => 52862
        )

    [57660] => Array
        (
            [level] => 2
            [name] => Ora
            [line_manager_number] => 52862
        )

    [9764] => Array
        (
            [level] => 2
            [name] => Peter
            [line_manager_number] => 54975
        )

    [54168] => Array
        (
            [level] => 2
            [name] => Qatar
            [line_manager_number] => 54975
        )

    [58192] => Array
        (
            [level] => 2
            [name] => Roger
            [line_manager_number] => 54975
        )

    [56098] => Array
        (
            [level] => 2
            [name] => Sandy
            [line_manager_number] => 54975
        )

    [54649] => Array
        (
            [level] => 2
            [name] => Trevor
            [line_manager_number] => 54975
        )

    [N9712] => Array
        (
            [level] => 2
            [name] => Una
            [line_manager_number] => 51970
        )

    [53360] => Array
        (
            [level] => 3
            [name] => Veronica
            [line_manager_number] => 54963
        )

    [57406] => Array
        (
            [level] => 3
            [name] => Wes
            [line_manager_number] => 54963
        )

    [60506] => Array
        (
            [level] => 3
            [name] => Xavier
            [line_manager_number] => 54963
        )

)

例如,我想要的数组的开头如下所示:

Array
(
    [58175] => Array
        (
            [number] => 58175
            [level] => 0
            [name] => Adam
            [line_manager_number] => 57900
            [children] => Array
                (
                    [0] => Array
                        (
                            [level] => 1
                            [name] => Brian
                            [line_manager_number] => 58175
                        )

                    [1] => Array
                        (
                            [level] => 1
                            [name] => Claire
                            [line_manager_number] => 58175
                        )

                    [2] => Array
                        (
                            [level] => 1
                            [name] => David
                            [line_manager_number] => 58175
                        )

                    [3] => Array
                        (
                            [level] => 1
                            [name] => Edward
                            [line_manager_number] => 58175
                        )

                    [4] => Array
                        (
                            [level] => 1
                            [name] => Fred
                            [line_manager_number] => 58175
                        )

                    [5] => Array
                        (
                            [level] => 1
                            [name] => Gail
                            [line_manager_number] => 58175
                        )

                    [6] => Array
                        (
                            [level] => 1
                            [name] => Helen
                            [line_manager_number] => 58175
                        )

                )

        )

然后对于每个孩子,它会列出他们的直接下属等等。

我已经尝试并试图获得这项权利,但无济于事。我已经尝试了以下

$a =  array_reverse($holding, true); 
foreach ($a as $k=>$v) {
    $holding[$v["line_manager_number"]]["children"][] = $v;
}

我反转了数组,因为层次结构中最低的总是最后一个,然后我可以取消设置(此处未完成)每个键,直到到达树的顶部。

这没有按预期工作。因此它将提供上面的示例,但不会更深入。它只有一层深。

有什么建议吗?

【问题讨论】:

  • $holding[$v["line_manager_number"]]["children"][] = $v; => 这一行在这个数组中添加一个元素 $holding[$v["line_manager_number"]]["children"],我不知道它在你的情况下是做什么用的?
  • 你为什么要删除你最初的问题?你问的是同样的事情。你可以直接编辑它。

标签: php arrays


【解决方案1】:

问题在于,当您将新项目重新添加到层次结构中时,您总是添加原始内容(来自数组副本 $a),而不是经过操作的原始数组($holding)。

如果你尝试

$holding[$v["line_manager_number"]]["children"][] = $holding[$k];

这应该添加完整的数组级别。

【讨论】:

    猜你喜欢
    • 2010-12-14
    • 1970-01-01
    • 1970-01-01
    • 2017-03-04
    • 2013-05-23
    • 2011-03-06
    • 1970-01-01
    • 2011-06-15
    • 1970-01-01
    相关资源
    最近更新 更多