我有一个包含id,parent_id和name字段的表,
父母可以有很多孩子,但孩子只有一个孩子。
在获取时,数组看起来像
Array
(
[0] => Array
(
[id] => 1
[parent_id] => 0
[name]=>firstName
)
[1] => Array
(
[id] => 2
[parent_id] => 1
[name]=>childFirstName
)
[2] => Array
(
[id] => 3
[parent_id] => 0
[name]=>SecondName
)
[3] => Array
(
[id] => 4
[parent_id] => 3
[name]=>childSecondName
)
)
从这张表中,我想要一个扁平数组,它应该是这样的..
//数组的键是表行的id,id对应的值是parent_name> name
Array
(
[1]=>[firstName],// [row_id]=>[name with parent]
[2]=>[firstName>childFirstName],
[3]=>[secondName],
[4]=>[secondName>childSecondName]
)
答案 0 :(得分:0)
让我们说你在$ i中获得了$ item而你的新数组在你的foreach中是$ n,使用:
foreach($items as $i){
$p = $i['parent_id'];
$n[$i['id']]=($p == 0) ? [$i['name']]: [$n[$p][0]=>$i['name']];
}
仅当父母没有父母时,这才有效。作为更谨慎的代码,
foreach($items as $i){
$p = $i['parent_id'];
if($p == 0){ //if no parent
$n[$i['id']]=[$i['name']];
continue;
} // if has parent from now on...
$k = array_keys($n[$p]); // if parent has a parent we have to
$k = $k[0]; // get the correct key for name
$n[$i['id']]=[$n[$p][$k]=>$i['name']];
}
以便上面的代码可以在多个层次结构级别上运行。
答案 1 :(得分:0)
<?php
$arr=array(
array("id" => 1, "parent_id" => 0, "name"=>"firstName"),
array("id" => 2, "parent_id" => 1, "name"=>"childFirstName"),
array("id" => 3, "parent_id" => 0, "name"=>"SecondName"),
array("id" => 4, "parent_id" => 3, "name"=>"childSecondName")
);
class test
{
var $arr=array();
function get_name($id)
{
$str='';
if(isset($this->arr[$id]))
{
$parent_id=$this->arr[$id]['parent_id'];
if($parent_id!=0) $str=$this->get_name($parent_id).'>';
$str.=$this->arr[$id]['name'];
}
return $str;
}
function convert($arr)
{
foreach($arr as $row)
{
$this->arr[$row['id']]=$row;
}
reset($this->arr);
$res=array();
foreach($this->arr as $id=>$row)
{
$res[$id]=$this->get_name($id);
}
return $res;
}
}
$c=new test();
$res=$c->convert($arr);
print_r($res);