如何使用PHP编写基于树的动态数组

如何使用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\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", "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/>';
}