嵌套数组。第三层正在消失

2023-12-08

我有那个数组:

$a = array(
    "7" => array(
        "id" => 7,
        "parent" => 6
    ),
    "6" => array(
        "id" => 6,
        "parent" => 5
    ),
    "5" => array(
        "id" => 5,
        "parent" => 4
    ),
    "4" => array(
        "id" => 4,
        "parent" => 0
    ),
    "3" => array(
        "id" => 7,
        "parent" => 2
    ),
    "2" => array(
        "id" => 7,
        "parent" => 1
    ),
    "1" => array(
        "id" => 7,
        "parent" => 0
    )
);

我想要的结果是:

$a = array(
    "4" => array(
        "id" => 4,
        "parent" => 0,
        array(
            "5" => array(
                "id" => 5,
                "parent" => 4,
                array(
                    "6" => array(
                        "id" => 6,
                        "parent" => 5,
                        array(
                            "7" => array(
                                "id" => 7,
                                "parent" => 6
                            )
                        )
                    )
                )
            )
        )
    ),
    "2" => array(
        "id" => 7,
        "parent" => 1,
        array(
            "3" => array(
                "id" => 7,
                "parent" => 2
            )
        )
    ),
    "1" => array(
        "id" => 7,
        "parent" => 0
    )
);

我使用的代码是这样的:

foreach($a as $v)
{
    if(isset($a[$v['PARENT']]))
    {
        $a[$v['PARENT']][$v['ID']] = $v;
        unset($a[$v['ID']]);
    }
}

我遇到的问题是我得到了这个结果:

$a = array(
    "4" => array(
        "id" => 4,
        "parent" => 0,
        array(
            "5" => array(
                "id" => 5,
                "parent" => 4
            )
        )
    ),
    "2" => array(
        "id" => 7,
        "parent" => 1,
        array(
            "3" => array(
                "id" => 7,
                "parent" => 2
            )
        )
    ),
    "1" => array(
        "id" => 7,
        "parent" => 0
    )
);

而不是需要它的结果。


要解决您的问题,您需要正确理解如何PHP 中的变量引用/别名 works.

看下面的示例代码,它看起来与您的代码没有太大不同,但使用引用来访问任何父级,即使它已经“移动”:

# transform $flat into a tree:
foreach($flat as $id => &$value)
{
    # check if there is a parent
    if ($parentId = $value['parent'])
    {
        $flat[$parentId][0][$id] =& $value; # add child to parent
        unset($flat[$id]); # remove reference from topmost level
    }
}
unset($value); # remove iterator reference
print_r($flat); # your tree

$flat现在包含来自的所有值$flat- 但重新排序。Demo.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

嵌套数组。第三层正在消失 的相关文章

随机推荐

  • HTML表单文件上传不起作用,$_POST不转发数据

    也许现在还为时过早 但无法找出问题所在 我已经制作了几个表格 但这次由于某种原因我无法转发文件输入的数据 这是我的索引 php 表格所在的位置
  • 在python中获取一组二维列表

    我有一个list如下 t 1 7 3 7 1 7 5 8 3 7 我需要得到一个set因此输出将是这样的 t 1 7 3 7 5 8 我尝试使用t set t 但没有成功 如果不关心顺序的话 可以先转换一下内层lists to tuples
  • 用户定义类模板参数推导的缩写函数模板语法指南

    我正在以缩写函数模板的风格编写推导指南 但我不确定是否允许 它可以在 gcc 和 clang 上编译 但不能在 msvc 上编译 错误是 错误 C3539 模板参数不能是包含 auto 的类型 哪个编译器正在做正确的事情 在这里尝试一下 t
  • 无法执行目标 org.apache.maven.plugins:maven-surefire-plugin:2.10:test

    我已经在互联网上搜索了近五天 寻找解决这个问题的方法 但我似乎无法自己找到并解决它 主要是因为我对 Maven 和 PlayN 都很陌生 所以我不完全确定我到底在看什么 但是 它显然在构建核心方面正忙得不可开交 似乎无法下载 工件过滤器 并
  • 为 Domino Java 代理创建交叉证书?

    我正在尝试使用 Domino java 代理连接到启用 https 的 Web 服务 使用 http 可以正常工作 但使用 https 则失败 我禁用了 TLS 1 2 显然 Fix Pack 4 和 5 有 TLS 1 2 和 Java
  • SoapUI Testrunner 给出有关 TestAssertionRegistry 的错误

    我能够使用有效的断言成功运行我的测试用例 但是当通过 testrunner 运行时 它会以这些错误开始 ERROR TestAssertionRegistry Missing assertion for type JsonPath Matc
  • onsubmit:返回 false;在 Rails 4 中如果 remote: true 则被忽略

    我在 Rails 4 中有以下形式 我的 validateForm 函数如下所示 function validateForm return false 即使它被调用 也会执行 AJAX 提交 我怎样才能避免这种情况 那么 如果函数 vali
  • “Klass:method(p)”中的“:”(单个冒号)是什么意思?

    今天我看到了这段代码 void CameraTree dragMoveEvent QDragMoveEvent event QTreeWidget dragMoveEvent event 我认为上面的代码是错误的 但 void Camera
  • (ggplot2 更新?)带有百分比标签的堆叠条形图

    我正在复制一些所有脚本 一年多前编码 发现我不再得到相同的情节 我使用相同的数据集和相同的代码 唯一的区别是我的 R 安装和 ggplot2 的版本 所以我假设这就是问题所在 让我用几个愚蠢的情节向你展示这个问题 当生成带有百分比标签的堆叠
  • 如何修复重叠的 Google 图表图例

    这是我已经研究了几个小时的事情 但我似乎找不到有效的解决方案 我有一个页面 ASP NET Core 上面有引导选项卡 每个选项卡显示不同的图表 我已经阅读了各种答案 并从这个网站和其他网站尝试了很多不同的事情 但我确信我做错了什么 这是我
  • 使用最频繁的值按组填充缺失值

    我正在尝试使用一组使用最频繁的值来估算缺失值pandasPython 中的模块 在检查了 Stack Overflow 上的一些帖子后 我成功实现了这一目标 import numpy as np import pandas as pd df
  • 使用 rgb2ind 减少 matlab 中的颜色数量

    我正在做一些图像处理 我需要减少图像的颜色数量 我找到rgb2ind可以做到这一点并编写了以下代码片段 clc clear all X map rgb2ind RGB 6 nodither X rgb2ind RGB map rgb ind
  • 如何防止 Rails 在生产环境中记录操作视图

    在 Rails 3 2 0 中 是否可以关闭 Rails 日志记录以渲染视图 生产环境中的ActionView LogSubscriber 目前我发现抑制的唯一方法是猴子修补它并增加日志级别以通过以下方式进行调试 有没有更好的方法或任何配置
  • 关于 np.all 与 axis 的使用

    我尝试测试使用np all 测试数组a is a array 0 0 0 0 0 0 0 0 0 0 0 0 0 0 255 255 255 255 0 0 0 255 0 0 b 255 0 255 c np all a b axis 1
  • 将数据从一个 MySQL 表移动到另一个表

    当用户单击名为 删除 的按钮时 我试图将数据从一个数据库 注册 移动到另一个数据库 我想将数据移动到名为archived的表中 这是我尝试过的 从谷歌找到 result mysql query Insert Into archived se
  • LINQ to SQL 是否使用 ActiveRecord 模式?

    我刚刚研究了ActiveRecord模式 并基于此 http en wikipedia org wiki Active record pattern 看来 Linq 2 Sql 或多或少实现了这一点 我错了吗 或者需要更改什么才能使其符合
  • OpenGL 中对 R8G8B8 纹理的 NPOT 支持

    我使用 glew 和 glut 创建了一个示例应用程序 它读取 dds 文件并显示它 我手动读取dds文件 R8G8B8中的NPOT 886 x 317 文件 并创建数据指针 unsigned char 然后我使用准备纹理 void pre
  • RxJS 订阅未触发

    目前正在学习 RxJS 我有一个整数selectedCourseIndex在我想要订阅一个单独的组件的服务中 课程部分 service ts private selectedCourseIndex number 1 this number
  • C 中的变量定义忽略[重复]

    这个问题在这里已经有答案了 Code int main int a 1 switch a int b 20 case 1 printf b is d n b break default printf b is d n b break ret
  • 嵌套数组。第三层正在消失

    我有那个数组 a array 7 gt array id gt 7 parent gt 6 6 gt array id gt 6 parent gt 5 5 gt array id gt 5 parent gt 4 4 gt array i