php 合并数组成父子关系,php - 将电子表格解析为PHP数组并返回具有父子关系的嵌套MLM表 - SO中文参考 - www.soinside.com...

这里有一些非递归代码可以让你开始(如果你还没有解决它),它将根据从电子表格加载的$rows数组构建一个树。

这个想法是每个节点都有一个名称和一个子数组。所以代码只是在步骤1中为每个人(父和子)创建一个节点,然后从下到上填写步骤2中的链接。

代码不健壮,如果$rows的行重复,列表中的顺序不正确,或者在错误的地方显示孩子和父母,则可能会产生不必要的结果!良好的生产代码需要处理这些可能性,可能是在构建树之前检查和修复$rows。

$rows = [];

$rows[] = array(0,1);

$rows[] = array(1,2);

$rows[] = array(1,3);

$rows[] = array(1,4);

$rows[] = array(2,5);

$rows[] = array(3,6);

$rows[] = array(6,7);

// Build the required tree

$tree = makeTree($rows);

print_r($tree);

function makeTree(array $rows){

//----------------------

// Step 1. Make a list of nodes

// -----------------------

// make the parent node

$nodeList =[];

$nodeList[0]['name'] = "parent:";

$nodeList[0]['Children'] = [];

// make the child nodes

foreach ($rows as $cells)

{

$nodeList[$cells[1]]['name'] = "child:".$cells[1];

$nodeList[$cells[1]]['Children'] = [];

}

//----------------------

// Step 2. link each child node to its parent node

// -----------------------

for ($n = count($rows)-1; $n>=0; $n--)

{ // do this from the bottom up

$nodeParent = &$nodeList[$rows[$n][0]];

$nodeChild = &$nodeList[$rows[$n][1]];

$nodeParent['Children'][$rows[$n][1]]= $nodeChild;

}

// pick out the parent node (which by now should have all links in place)

$tree[0] = $nodeList[0];

return($tree);

}

它输出如下,可能或不接近你需要的。

Array

(

[0] => Array

(

[name] => parent:

[Children] => Array

(

[1] => Array

(

[name] => child:1

[Children] => Array

(

[4] => Array

(

[name] => child:4

[Children] => Array

(

)

)

[3] => Array

(

[name] => child:3

[Children] => Array

(

[6] => Array

(

[name] => child:6

[Children] => Array

(

[7] => Array

(

[name] => child:7

[Children] => Array

(

)

)

)

)

)

)

[2] => Array

(

[name] => child:2

[Children] => Array

(

[5] => Array

(

[name] => child:5

[Children] => Array

(

)

)

)

)

)

)

)

)

)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/352933.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在JVM上对高并发HTTP服务器进行基准测试

在第一篇有关HTTP客户端的文章 (我将您重定向到JVM上的高效HTTP的介绍)之后,现在让我们讨论HTTP 服务器 。 有一些关于HTTP服务器的基准测试,但是它们经常受到诸如以下缺点的阻碍: 没有有效地执行高并发方案&#xf…

时间常用api

1.常用api 创建 Date 对象 - 年 - 月 - 日 - 小时 - 分 - 秒 - 星期 var nownew Date() var year now.getFullYear(); var month now.getMonth(); (月 :0 - 11 ,处理: month month 1;) var da…

最大流的算法——Edmonds-Karp算法(最短路径增广算法)

最大流的算法——Edmonds-Karp算法(最短路径增广算法) 这里介绍一个最简单的算法:Edmonds-Karp算法 即最短路径增广算法 简称EK算法 EK算法基于一个基本的方法:Ford-Fulkerson方法 即增广路方法 简称FF方法 增广路方法是很多网络流算法的基础 一般都在残留网络中实现 其思路是每…

php做一个计算日期之间天数,PHP计算任意两个日期之间的天数

PHP面试题中,关于日期的题目作为基础考题经常出现,下面讨论一下获取两个日期之间的天数的方法。收到一个答案,拆分年、月、日,分别进行减法,然后统计天数,好累。针对低版本的PHP可以用下面的方式搞定&#…

[usaco2004][bzoj3379] 交作业

按距离从小到大排序 f[i][j][0或1]表示在i或j还有i-j没有完成 转移 tmpdp[i][j][0];tmpmin(tmp,max(dp[i][j1][1]a[j1].dist-a[i].dist,a[i].t));tmpmin(tmp,max(dp[i-1][j][0]a[i].dist-a[i-1].dist,a[i].t)); 注意边界 比如:dp[0][i],dp[0][c3]初值应为inf #inclu…

程序员的快速成长之路

在一封与TechRepublic会员交流的邮件当中,他提到了面向程序员的博客、文章及杂志分成两类:面向初学者类("hello world"这种类型的教程)以及面向专家类(MSDN杂志)。这个观点很好,有关程…

oracle 强制 断开,ORA-01092: ORACLE 例程终止 强行断开连接

今天测试部门的人叫我过去,说是数据库当了,起不来了。我过去看了看情况,做了如下操作SQL> shutdown immediate数据库已经关闭。已经卸载数据库。Oracle 例程已经关闭。SQL> startupORACLE 例程已经启动。Total System Global Area 135…

weblogic运行项目_在WebLogic 12c上运行RichFaces

weblogic运行项目我最初以为我可以在几个月前写这篇文章。 但是我最终被不一样的事情所淹没。 其中之一是,它无法像我在4.0版本中那样简单地启动RichFaces展示柜。 有了所有的JMS magic和不同的提供程序检查,这已经成为简单构建和部署它的挑战。 无论如何…

超详细在Ubuntu下安装JDK图文解析

我们选择的是jdk1.6.0_30版本。安装文件名为jdk-6u30-linux-i586.bin. 1、复制jdk到安装目录 (1)假设jdk安装文件在桌面,我们指定的安装目录是:/usr/local/java 。可是系统安装后在/usr/local下并没有java目录,这需要…

oracle 整个表空间迁移,oracle11g迁移表空间

表空间名为sbjc,要从D:\APP\ORACLE\ORADATA\TABLESPACE\SBJC.DBF 迁移到 F:\oracle\oradata\tablespace\SBJC.DBF。 扼要操作步骤: 第一步:登陆数据库 第二步:中止数据库 第三步:在open方式下启动数据库 第四步&#x…

Qt5使用QFtp,二次封装

1、需要的东西 ftp.cpp,ftp.h是二次封装的ftp类,放在工程下包含 QFtp和qftp.h放在D:\Qt5.7.1\5.7\msvc2013\include\QtNetwork; Qt5Ftp.lib和Qt5Ftpd.lib是编译生成的库,放在工程源文件下 2、包含库 #pragma comment(lib,"Qt5Ftpd.lib&q…

无参数泛型方法反模式

最近&#xff0c;有关Java泛型的一个非常有趣的问题发布到Stack Overflow和reddit上。 考虑以下方法&#xff1a; <X extends CharSequence> X getCharSequence() {return (X) "hello"; }尽管不安全的转换看起来有些古怪&#xff0c;并且您可能会猜这里有些问…

oracle数据库升级失败,Oracle 11.2.0.1 rac 升级失败后,数据库降级方案(flashback database)...

升级失败后&#xff0c;数据库降级方案(flashback database)环境&#xff1a;Oracle 11.2.0.1 rac on redhat 5.8Flashback database准备工作查看是否flashback database功能sysRACDB>select log_mode,open_mode,flashback_on fromv$database;LOG_MODEOPEN_MODE …

Ubuntu下安装Oracle11g(图文教程)

由于课程需要&#xff0c;要在Ubuntu下安装一个Oracle&#xff0c;之前都没有装过&#xff0c;所以想通过这篇博文记录一下 1.下载Oracle 11g 下载地址&#xff1a;http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index-092322.html 我选择下载的是…

class12_pack_grid_place 放置位置

其中的部分运行效果图&#xff08;程序见序号1&#xff09;&#xff1a; #!/usr/bin/env python# -*- coding:utf-8 -*-# ------------------------------------------------------------## 参考资料&#xff1a;# 用 python 和 tkinter 做简单的窗口视窗 - 网易云课堂# https:…

oracle强制执行计划,OBA技能2-Oracle执行计划顺序表连接

小仙我在学习索引执行行为的时候&#xff0c;有个疑惑&#xff1f;那就是索引是找到一个值就马上回表&#xff0c;然后再找下一个值&#xff0c;再回表。比如索引唯一扫描&#xff0c;索引范围扫描&#xff0c;索引全扫描&#xff0c;索引快速扫描。好像都是要回表。尤其是范围…

ubuntu中启动oracle数据库

前期准备&#xff1a;如果你还没有在ubuntu上安装oracle请先看我之前到日志http://blog.csdn.net/backtracker/article/details/66247181. $su oracle $ sqlplus /nolog 将出现如下连接数据库信息&#xff1a; SQL*Plus: Release 10.2.0.1.0 - Production on Fri Jul 8 10:1…

oracle 输出到页面,利用Xming 将Linux 图形界面输出到Windows上

Linux上安装Oracle 时需要图形界面, 但又不想在服务器上安装图形界面怎么办,这时候就需要用到Xming 这个神器了安装过程比较简单, 直接下一步下一步即可安装完成后先运行, Xlaunch注意:这个No Access Control的勾勾一定要勾上,否则 执行export到Windows主机上时会提示 No proto…

spring 事件模型_Spring–设计领域模型和服务层

spring 事件模型我们将为时间表管理构建应用程序。 因此&#xff0c;让我们首先考虑一些用例和实体。 让我用几个项目符号写它们&#xff1a; 任务由经理分配给员工。 一项任务可以分配给许多员工。 员工将他在某些任务上工作的小时数填充到系统中。 经理/员工查看时间表上的…

log4j/slf4j

log4j的使用 引入log4j.jar包<dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version> </dependency> 配置log4j.propertieslog4j.rootLoggerINFO,Console,OneFile,errFile #输出到控制…