如何使用PHP编写基于树的动态数组
我有如下数组。这是动态的,$main\u arr可以选择添加/删除/编辑如何使用PHP编写基于树的动态数组,php,arrays,Php,Arrays,我有如下数组。这是动态的,$main\u arr可以选择添加/删除/编辑 $main_arr['Day'] = array('Day 1', 'Day 2'); $main_arr['Hall'] = array('Hall 1', 'Hall 2'); $main_arr['Session'] = array('Session 1', 'Session 2'); 我需要准备类似于父选项的树结构数组 {"key":2, "name":"Day 1", "title":"Day 1", "par
$main_arr['Day'] = array('Day 1', 'Day 2');
$main_arr['Hall'] = array('Hall 1', 'Hall 2');
$main_arr['Session'] = array('Session 1', 'Session 2');
我需要准备类似于父选项的树结构数组
{"key":2, "name":"Day 1", "title":"Day 1", "parent":1},
{"key":3, "name":"Hall 1", "title":"Day 1", "parent":2},
{"key":4, "name":"Session 1", "title":"Day 1 | Hall: 1", "parent":3},
{"key":5, "name":"Session 2", "title":"Day 1 | Hall: 1", "parent":3},
{"key":6, "name":"Hall 2", "title":"Day 1", "parent":2},
{"key":7, "name":"Session 1", "title":"Day 1 | Hall: 2", "parent":6},
{"key":8, "name":"Session 2", "title":"Day 1 | Hall: 2", "parent":6},
{"key":9, "name":"Day 2", "title":"Day 2", "parent":1},
{"key":10, "name":"Hall 1", "title":"Day 2", "parent":9},
{"key":11, "name":"Session 1", "title":"Day 2 | Hall: 1", "parent":10},
{"key":12, "name":"Session 2", "title":"Day 2 | Hall: 1", "parent":10},
{"key":13, "name":"Hall 2", "title":"Day 2", "parent":9},
{"key":14, "name":"Session 1", "title":"Day 2 | Hall: 2", "parent":13},
{"key":15, "name":"Session 2", "title":"Day 2 | Hall: 2", "parent":13}
我的PHP代码(从注释中复制):
这就是你要找的吗
<?php
$day = 2;
$hall = 2;
$session = 2;
$id = 1;
$main_parent = 1;
$main_array = array();
for ($i = 1; $i <= $day; $i++) {
$id++;
$main_array[] = array("key"=>$id, "name"=>"Day " . $i, "title"=>"Day " . $i, "parent"=>1);
$parent_day = $id;
for ($j = 1; $j <= $hall; $j++) {
$id++;
$main_array[] = array("key"=>$id, "name"=>"Hall " . $j, "title"=>"Day " . $i, "parent"=>$parent_day);
$parent_hall = $id;
for ($k = 1; $k <= $session; $k++) {
$id++;
$main_array[] = array("key"=>$id, "name"=>"Session " . $k, "title"=>"Day " . $i . " | Hall: " . $j, "parent"=>$parent_hall);
}
}
}
我自己准备了基于动态数组输入准备动态树的逻辑
$main_arr[] = array('Day 1', 'Day 2');
//$main_arr[] = array('Location 1', 'Location 2');
$main_arr[] = array('Hall 1', 'Hall 2');
//$main_arr[] = array('Sub Hall 1', 'Sub Hall 2');
$main_arr[] = array('Session 1', 'Session 2');
//$main_arr[] = array('Sub Session 1', 'Sub Session 2');
$main_count = count($main_arr);
$arr = array();
$last_arr = array();
$id = $parent = 1;
for($i = 0; $i < $main_count; $i++) {
$cur_arr = $main_arr[$i];
$next_arr = array();
if($main_arr[$i+1]) {
$next_arr = $main_arr[$i+1];
}
$parent = $id;
if($i == 0) {
foreach($cur_arr as $cur_key => $cur_label) {
$id++;
$arr[$id]['title'] = $cur_label;
$arr[$id]['parent'] = $parent;
$last_arr[$id] = $title = "$cur_label";
insert($id, $parent, $title, $subtitle);
}
}
foreach($last_arr as $last_key => $last_label) {
foreach($next_arr as $next_key => $next_label) {
$id++;
$arr[$id]['title'] = "$last_label - $next_label";
$arr[$id]['parent'] = $last_key;
insert($id, $last_key, $next_label, $last_label);
$next_last_arr[$id] = "$last_label - $next_label";
}
}
$last_arr = $next_last_arr;
unset($next_last_arr);
}
function insert($id, $parent, $title, $subtitle) {
echo '{"key":'.$id.', "name":"'.$title.'", "title":"'.$subtitle.'", "parent":'.$parent.'},<br/>';
}
$main_arr[]=数组(“第1天”、“第2天”);
//$main_arr[]=数组(“位置1”、“位置2”);
$main_arr[]=阵列(“1号厅”、“2号厅”);
//$main_arr[]=阵列(“1号副厅”、“2号副厅”);
$main_arr[]=数组(“会话1”、“会话2”);
//$main_arr[]=数组(“子会话1”、“子会话2”);
$main\u count=计数($main\u arr);
$arr=array();
$last_arr=array();
$id=$parent=1;
对于($i=0;$i<$main\u count;$i++){
$cur_arr=$main_arr[$i];
$next_arr=array();
如果($main_arr[$i+1]){
$next_arr=$main_arr[$i+1];
}
$parent=$id;
如果($i==0){
foreach($cur\u arr as$cur\u key=>$cur\u label){
$id++;
$arr[$id]['title']=$cur_标签;
$arr[$id]['parent']=$parent;
$last_arr[$id]=$title=“$cur_label”;
插入($id、$parent、$title、$subtitle);
}
}
foreach($last\u arr as$last\u key=>$last\u label){
foreach($next\u arr as$next\u key=>$next\u label){
$id++;
$arr[$id]['title']=“$last\u label-$next\u label”;
$arr[$id]['parent']=$last_key;
插入($id、$last\u key、$next\u label、$last\u label);
$next_last_arr[$id]=“$last_label-$next_label”;
}
}
$last_arr=$next_last_arr;
未设置($next\u last\u arr);
}
函数插入($id、$parent、$title、$subtitle){
回显“{”键“.$id.”,“名称“.$title.””,“标题“.$subtitle.””,“父项“.$parent.”,
”;
}
?>
谢谢你的支持。上传图片供参考
链接:那么你尝试了什么?pu一些代码…嗨,逻辑准备好了,请检查,谢谢谢谢谢谢,我需要登录来形成数组,就像你提到的那样基于$main\u arr值,这可能有一个添加/删除/编辑的选项。需要一个逻辑来准备这个树结构恐怕我不确定你需要做什么。什么是登录?什么是输入数据,它需要去哪里?也许你可以发布一些代码?
$main_arr[] = array('Day 1', 'Day 2');
//$main_arr[] = array('Location 1', 'Location 2');
$main_arr[] = array('Hall 1', 'Hall 2');
//$main_arr[] = array('Sub Hall 1', 'Sub Hall 2');
$main_arr[] = array('Session 1', 'Session 2');
//$main_arr[] = array('Sub Session 1', 'Sub Session 2');
$main_count = count($main_arr);
$arr = array();
$last_arr = array();
$id = $parent = 1;
for($i = 0; $i < $main_count; $i++) {
$cur_arr = $main_arr[$i];
$next_arr = array();
if($main_arr[$i+1]) {
$next_arr = $main_arr[$i+1];
}
$parent = $id;
if($i == 0) {
foreach($cur_arr as $cur_key => $cur_label) {
$id++;
$arr[$id]['title'] = $cur_label;
$arr[$id]['parent'] = $parent;
$last_arr[$id] = $title = "$cur_label";
insert($id, $parent, $title, $subtitle);
}
}
foreach($last_arr as $last_key => $last_label) {
foreach($next_arr as $next_key => $next_label) {
$id++;
$arr[$id]['title'] = "$last_label - $next_label";
$arr[$id]['parent'] = $last_key;
insert($id, $last_key, $next_label, $last_label);
$next_last_arr[$id] = "$last_label - $next_label";
}
}
$last_arr = $next_last_arr;
unset($next_last_arr);
}
function insert($id, $parent, $title, $subtitle) {
echo '{"key":'.$id.', "name":"'.$title.'", "title":"'.$subtitle.'", "parent":'.$parent.'},<br/>';
}