数组中的类别层次结构(cat id => 父 id)

2023-12-19

我正在尝试从一个简单数组创建一个多维数组层次结构,其中包含成对的类别 id 和父 id。这些类别可以同时是父类别和子类别。基本类别的父级为 0(=无父级)。例如:

# cat_id => parent_id
$initialArray = array(
  1 => 0,
  2 => 1,
  3 => 2,

  4 => 0,
  5 => 4,

  6 => 0
);

由此,我想获得一个表示如下结构的数组:

  • 1
    • 2
      • 3
  • 4
    • 5
  • 6

我不会知道内容$initialArray预先。

我试图查看其他类似的问题,但找不到答案。请帮忙!


我知道,聚会迟到了,但看起来很有趣......

/*
 * This is a 'multiway' tree where:
 *   a 'parent' can have any number of 'child' nodes
 *   therefore the 'parent node' must look like:
 *   [parentId] => array()
 *
 *   where [parentId] is the index of an array;
 */

它将从根节点开始一次插入一个节点。对于大树来说,它可能会变得非常昂贵。

工作示例位于:Viper-7.com http://viper-7.com/gqSBgc

完成工作的例程:

/**
 * Insert:  Find the 'parent' node
 *          if child not found then insert a 'node'
 *
 * @param array node passed by reference as the new node will be inserted
 * @param integer $parentId - root Id must be the lowest value
 * @param integer $childId
 * @return boolean  true if parentId found and processed
 */
function insertNode(&$node, $parentId, $childId) {

    if (isset($node[$parentId])) { // this node will be processed
        if (!isset($node[$parentId][$childId])) {
            $node[$parentId][$childId] = array(); // add child node
            return true;
        }
        return true; // end of processing
    }

    // check all the children of this node...
    foreach($node as &$child) { // need the reference
        if (insertNode($child, $parentId, $childId)) {
            return true;
        }
    }
    return false; // parentId not in the tree
}

Notes:

The node to be processed is passed by reference.
The processing will end when the 'parent' id is found 

给定的输入节点列表是 'child' => 'parent' 顺序,这是不寻常的,没关系,只要记住在处理中......

处理输入数据:

$theTree = array(current($links) => array()); // root

// insert all the child nodes into the tree
foreach($links as $childId => $parentId) {
    $inserted = insertNode($theTree, $parentId, $childId);
}

// output the tree
echo '<pre>', 'Children are in the same order as the input array.', '<br />';
    print_r($theTree);
echo '</pre>';

需要排列输入列表,以便加载“树”,以便添加要添加的子项的父项must已经在树上了。我假设输入列表已经按要求的顺序排列

测试数据,排序并显示:

# cat_id => parent_id
$links = array(
   1 => 0,
   2 => 1,
   3 => 2,

   4 => 0,
   5 => 4, // multiple children
  11 => 4,
  99 => 4,
  13 => 11,

   6 => 0
);

输出,我在原始输入中添加了一个子树......

Children are in the same order as the input array.
Array
(
    [0] => Array
        (
            [1] => Array
                (
                    [2] => Array
                        (
                            [3] => Array
                                (
                                )
                        )
                )
            [4] => Array
                (
                    [5] => Array
                        (
                        )

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

数组中的类别层次结构(cat id => 父 id) 的相关文章

  • Julia 中随机输出的数组理解

    如果我今天早些时候问过这个问题 那么这个问题是一个延伸 https stackoverflow com questions 44097910 killing a for loop in julia array comprehension 基
  • 简单的 DAWG 创建算法?

    我需要创建一个 DAWG http en wikipedia org wiki Directed acirclic word graph http en wikipedia org wiki Directed acyclic word gr
  • 防止我的 PHP 网络爬虫停止运行

    我正在使用 PHPCrawl 类并添加了一些 DOMDocument 和 DOMXpath 代码来从网页中获取特定数据 但是脚本在接近爬行整个网站之前就停止了 我已将 set time limit 设置为 100000000 因此这不应该成
  • 通过位屏蔽查找数据间隙

    我面临着在数字序列中查找给定长度的不连续性 间隙 的问题 因此 例如 给定 1 2 3 7 8 9 10 和一个间隙length 3 我会找到 4 5 6 如果间隙是length 4 我什么也找不到 当然 真正的序列要长得多 我在很多帖子中
  • 如何根据普通 JavaScript 中的属性对对象数组进行分组

    你怎么groupBy基于普通 JavaScript 中特定属性的对象数组 例如给出的 const products category Sporting Goods price 49 99 stocked true name Football
  • 如何在 C# 中将二维数组转换为二维列表

    我有一个二维字符串数组 我想把它转换成 List
  • PHP 中的延迟加载类方法

    我有一堂课 里面有一些相当大的方法 在它的基本和最常见的状态下 大多数功能并不是必需的 所以我想知道是否有一种方法可以延迟加载类的一部分 这些方法需要能够访问私有 受保护的成员 因此如果这些方法是类的本机方法 那将是理想的选择 但是在寻找其
  • 我可以制作一个 PHP“宏”(如#define)来为函数调用提供参数吗?

    我所说的参数是 FILE and LINE 函数调用者的那些 以便函数可以在错误报告中使用它们 假设我有两个文件和 file 1 php 调用的第 100 行my func 在 file 2 php 中 我想拨打这个电话my func FI
  • 将我的 JSON 字符串格式化为 PHP 中的
      有序列表

    我正在为一个宠物项目开发一个简单的 CMS 我目前有一个 JSON 字符串 其中包含菜单结构的页面 ID 和父页面 ID 的列表 我现在想将此字符串转换为嵌套或分层列表 有序列表 我尝试过循环查找 但似乎最终得到了过于复杂的子类范围 我正在
  • 在 Woocommerce 结帐页面上移动亚马逊按钮

    我需要移动 Woocommerce 结账页面上的 Amazon Pay 消息 按钮 我们正在使用Woocommerce 的亚马逊支付 https woocommerce com products pay with amazon 当我查看插件
  • 将查询错误转变为 MySQLi 中的异常[重复]

    这个问题在这里已经有答案了 我试图将 MySQLi 查询错误转为异常 但无法 mysqli sql 异常 http php net manual en class mysqli sql exception php仅当连接数据库失败时才会抛出
  • 如何使用 Amazon S3 SDK 更新元数据

    我正在使用 Amazon 的 AWS SDK 的 PHP 版本 我有一堆带有Expires标头 我想删除该标头并添加一个Cache control标题代替 这更新对象 http docs amazonwebservices com AWSS
  • 无法在 PHP 中接收 JSON POST 请求

    我正在将 JSON 对象从 Java 传递到 PHP 我正在使用 jdk 1 8 和 WAMPserver 下面是Java代码 import java io IOException import org apache http client
  • 从数组中删除空字符串,同时保持记录而不循环?

    这个问题在这里被问到 从数组中删除空字符串 同时保留非空字符串的索引记录 https stackoverflow com questions 18113243 remove empty strings from array while ke
  • 在 JavaScript/CoffeeScript 中确定一个数组是否包含另一个数组的内容

    在 JavaScript 中 如何测试一个数组是否包含另一个数组的元素 arr1 1 2 3 4 5 8 1 10 2 3 4 5 9 function name arr1 gt true 没有 set 函数可以执行此操作 但您可以简单地执
  • 将字符串中每个单词的第一个字符大写,“and”、“to”等除外

    如何使字符串中每个单词的第一个字符大写接受几个我不想转换的单词 例如 和 to 等 例如 我想要这个 ucwords art and design 输出下面的字符串 艺术与设计 有可能像 strip tags text p a 我们允许 并
  • 特殊字符和 URL 重写

    我目前正在开发一个应用程序 该应用程序从暴雪社区 API 中提取 JSON 数据并使用 PHP 对其进行解析 一切正常 直到我遇到一个名字中有特殊字符的角色 为了提取角色数据 我需要知道他们的角色名称和他们所在的领域 我将名称和领域通过 U
  • 如何在 PHP 中打开从第 X 行到第 Y 行的文件?

    我在 PHP 文档中看到的最接近的是 fread 给定的长度 但这并没有指定从哪一行开始 还有其他建议吗 是的 您可以轻松地做到这一点SplFileObject seek http de php net manual en splfileo
  • 上传并 POST 文件到 PHP 页面

    我需要一种上传文件并将其 POST 到 php 页面的方法 php 位于 apache 服务器上 我在我的桌面应用程序中使用这个 C 代码 这是一个c代码的套接字 当我执行程序时 可以得到 文件大小为772906 打开服务器正常 文件大小为
  • android php 连接错误? (添加java代码)

    我试图从 android 应用程序获取位置 纬度 经度 并使用 php 插入数据库 然后提取 10m 半径内的数据 问题是 当我使用智能手机测试代码时 本地测试正常 数据未正确插入 表 usergps 有 3 列 名称 纬度 经度 在我测试

随机推荐

  • 如何在Android平台上启用SSL调试?

    有没有类似设置的 D javax net debug ssl对于 Java 桌面应用程序 可以在命令行中使用 但是对于 Android 来说呢 我尝试通过以下方式在代码中设置它System setProperty javax net deb
  • C# 中如何测试线程是否持有某个对象的锁?

    有没有办法测试当前线程是否持有对象的监视器锁 IE 相当于 Java 中的 Thread holdsLock Thanks 我不相信有 你可以做一些糟糕的黑客事情 比如打电话Monitor Wait monitor 0 并抓住Synchro
  • MVC5 和 Ninject 的依赖注入失败

    我试图在控制器中注入几个类 但失败了 这就是我所做的 Added Ninject Web WebApi WebHost and WebActivatorExNuGet 包 在下面创建了以下类App Start NinjectWebCommo
  • 在 Python 中,在另一个类中定义一个类有什么好处吗?

    我这里所说的是嵌套类 本质上 我正在建模两个类 一个 DownloadManager 类和一个 DownloadThread 类 这里最明显的 OOP 概念是组合 然而 组合并不一定意味着嵌套 对吗 我的代码看起来像这样 class Dow
  • 如果只是端口不同,AJAX调用是否跨域?

    主页是 www myserver com 80 ajax 引用 www myserver com 8081 状态码为 0 文本为空 这是跨域拒绝吗 是的 这违反了同源政策 http en wikipedia org wiki Same or
  • 在 JavaScript 中在画布中生成随机图像

    大家好 我正在尝试使用画布制作一个 javascript 游戏 我想生成随机的敌方物体 到目前为止 我发现这是一个生成示例 JSFiddle 演示 http jsfiddle net m1erickson RCLtR 如何加载图像而不是球
  • 如何将 itertools“石斑鱼”对象转换为列表

    我正在尝试学习如何在 Python 中使用 itertools groupby 并且我想找到每组字符的大小 起初我尝试看看是否能找到单个组的长度 from itertools import groupby len list list gro
  • 如何在 ASP.net C# 中单击数据网格中的单元格

    我正在将数据表中的一列导入到我的网格中 现在我想导航到一个新页面 通过获取所选值来选择网格中的单元格 我已经尝试过在网格中包含绑定字段 例如
  • 实体组件系统中的拆分组件需要太多重构

    我有一个使用实体组件系统 ECS 的现有工作 C 游戏库 我的库的用户想要创建一些组件 例如Cat class Cat public int hp float flyPower 他可以修改hp每一个的cat例如 for SmartCompo
  • AAC 编解码器库(libFAAC 替代方案)

    我正在寻找适用于 Linux 和 Windows 的 AAC 编码器 解码器库 适用于 C C 应用程序 这是针对商业产品的 因此 libFAAC 不是一个选项 我看过 Nero 和 MainConcept 的产品 但我更喜欢具有 LGPL
  • C++ 中更宽松的抛出说明符错误

    以下代码生成 Looser throw specifier error 你能帮我克服这个错误吗 class base virtual void abc throw exp1 void base abc throw exp1 class su
  • jQuery通过POST发送HTML数据

    我正在使用 jQuery 使用 div 的 HTML 内容向 PHP 文件发送 POST HTML 内容包含表格 输入 较小的 div 我想获取主 DIV 的内容并将其发送到数据库 我能想到的唯一选择是 POST 方法 但我不知道是否可以用
  • 从 Firefox 或 Chrome 启动 file://

    我正在寻找一种方法来启动位于本地文件网络上的文件 以便使用 Firefox 或 Chrome 通过本地 Intranet 使用 该链接在 IE 中运行良好 a href View Report a nbsp 但在 Firefox 中它显示
  • REST 服务错误:资源不可用 Glassfish 4.0 JAX-RS 2.0

    我试图在 Glassfish 4 0 上部署一个简单的 JAX RS 服务 但不断收到以下错误 HTTP Status 404 Not Found type Status report messageNot Found descriptio
  • 如何在 Android 活动屏幕上淡入图像?

    我想在 Android 活动屏幕上显示一张照片 并从浅单调的棕褐色逐渐持续淡入到最终的全色 我知道如何在 Java Image BufferedImage 上为 Graphic 对象执行此操作 但不幸的是我对 Android 编程环境一无所
  • 获取范围内的蓝牙设备

    我正在为 Windows 桌面进行开发 我想让设备处于范围内 然后以列表形式向用户显示 这是我正在使用的代码 HBLUETOOTH DEVICE FIND founded device BLUETOOTH DEVICE INFO devic
  • 如何获取触发 Jenkins 构建的“更改”(提交消息)?

    我可以去 http myjenkins 8080 job Project 42 changes 并查看触发特定 Jenkins 构建的提交消息 但是 我想通过 REST API 或其他方式获取它 我在搜索方面没有任何运气 是否有捷径可寻 以
  • Acumatica 定制项目中的 CREATE VIEW 语句

    有谁知道如何将 CREATE VIEW SQL 语句推送到 Acumatica 定制项目中 我知道如何在 SQL Management Studio 中执行此操作 但通过自定义项目执行此操作对于 Acumatica SaaS 客户非常有用
  • 如何使用 Swift 将故事发布到 Facebook?

    我到处搜索 但找不到任何有关如何用 Swift 将故事发布到 Facebook 的文档 我尝试将此代码从 Obj C 翻译为 Swift 但没有取得太大进展 我不知道如何在 Obj C 中编码 我希望在 Swift 中完成这样的事情 htt
  • 数组中的类别层次结构(cat id => 父 id)

    我正在尝试从一个简单数组创建一个多维数组层次结构 其中包含成对的类别 id 和父 id 这些类别可以同时是父类别和子类别 基本类别的父级为 0 无父级 例如 cat id gt parent id initialArray array 1