我想从多维数组创建树形数组。我想创建一个目录结构,所以我需要Tree格式的数组。 根目录是类别名称,其索引为零(0)。 然后将所有子目录放在根目录下。 请帮助我用PHP创建一个树形数组。
给出了我的数组。
$array = array
(
array(array('category_id'=>1,'parent'=>0,'category'=>'General')),
array(
array('category_id'=>5,'parent'=>4,'category'=>'sds'),
array('category_id'=>4,'parent'=>1,'category'=>'ssaas'),
array('category_id'=>1,'parent'=>0,'category'=>'General'),
),
array(array('category_id'=>3,'parent'=>0,'category'=>'SOP')),
array(
array('category_id'=>4,'parent'=>1,'category'=>'ssaas'),
array('category_id'=>1,'parent'=>0,'category'=>'General'),
),
array(array('category_id'=>2,'parent'=>0,'category'=>'Test')),
);
结果数组为
$array = array(
array(
'category_id'=>1,
'parent'=>0,
'category'=>'General',
'child' => array(
'category_id'=>4,
'parent'=>1,
'category'=>'ssaas',
'child' => array(
'category_id'=>4,
'parent'=>1,
'category'=>'sds',
),
),
),
array(
'category_id'=>2,
'parent'=>0,
'category'=>'Test',
),
array(
'category_id'=>3,
'parent'=>0,
'category'=>'SOP',
),
);
答案 0 :(得分:0)
$arr = [];
$g_pa = ['name' => 'grandpa'];
$dad = ['name' => 'dad'];
$son = ['name' => 'son']
$another_g_pa = ['name' => 'another_grandpa'];
$dad['child'] = $son;
$g_pa['child'] = $dad;
$arr = [$g_pa, $another_g_pa];
所以,这是阵列中的爷爷,爸爸的孩子是儿子,爸爸是爷爷的孩子。对于短代码,请使用[]
,而不要使用array()
。
答案 1 :(得分:0)
您可以扁平化->按父级排序->然后用原始数组制作一棵树:
$array = array
(
array(array('category_id'=>1,'parent'=>0,'category'=>'General')),
array(
array('category_id'=>5,'parent'=>4,'category'=>'sds'),
array('category_id'=>4,'parent'=>1,'category'=>'ssaas'),
array('category_id'=>1,'parent'=>0,'category'=>'General'),
),
array(array('category_id'=>3,'parent'=>0,'category'=>'SOP')),
array(
array('category_id'=>4,'parent'=>1,'category'=>'ssaas'),
array('category_id'=>1,'parent'=>0,'category'=>'General'),
),
array(array('category_id'=>2,'parent'=>0,'category'=>'Test')),
);
echo '---Original Array---';
echo "<pre>"; print_r($array); echo "</pre>";
$tree = array();
// flat
foreach($array as $leaves)
{
foreach($leaves as $leaf) {
$tree[$leaf['category_id']] = $leaf;
}
}
//sort by parent
uasort($tree, 'parentSort');
function parentSort($a, $b) {
if($a['parent'] == $b['parent']) {
return 0;
}
return ($a['parent'] > $b['parent']) ? -1 : 1;
}
echo '---Flat Array---';
echo "<pre>"; print_r($tree); echo "</pre>";
// order
foreach($tree as $leaf)
{
if ($leaf['parent'] != 0) {
$tree[$leaf['parent']]['child'][] = $tree[$leaf['category_id']];
unset($tree[$leaf['category_id']]);
}
}
//sort back by parent
ksort($tree);
echo '---Tree Array---';
echo "<pre>"; print_r($tree); echo "</pre>";