我有这个多维数组:
$a = array(
array('id' => 1,'parent_id' => 'null'),
array('id' => 3,'parent_id' => 'null'),
array('id' => 4,'parent_id' => 3 ),
array('id' => 5,'parent_id' => 4 ),
array('id' => 8,'parent_id' => 1 ),
array('id' => 6,'parent_id' => 5 ),
array('id' => 7,'parent_id' => 4 ),
array('id' => 2,'parent_id' => 1 ) )
我希望以下结果基于关系id
和parent_id
:
$b = array(
array('id' => 1,'parent_id' =>' null','children'=>array(
array('id' => 2,'parent_id' => 1 ),
array('id' => 8,'parent_id' => 1 )
)
),
array('id' => 3,'parent_id' => 'null' ,'children'=>array(
array('id' => 4,'parent_id' => 3,'children'=>array(
array('id' => 5,'parent_id' => 4 ,'children'=>array(
array('id' => 6,'parent_id' => 5 )
)),
array('id' => 7,'parent_id' => 4 )
)),
))
);
答案 0 :(得分:2)
这是代码,希望它可以帮到你。
$result
是您想要的结果数组。
$result = array();
foreach( $a as $aRow ) {
if ( $aRow["parent_id"] != 'null') {
$aRowID = findParentRow( $a , $aRow["parent_id"] );
if ( $aRowID > -1 ) {
$result = insertChild( $result , $aRowID , $aRow );
}
}
}
这是一个帮助您找出父数组中的键并将键返回给您的函数
function findParentRow( $arr , $id ) {
$rowID = -1;
foreach ( $arr as $row ) {
if ( $row["id"] == $id ) {
$rowID = key( $arr );
return $rowID;
}
}
return $rowID;
}
根据行号插入子数组
function insertChild( $arr , $rowID , $child ) {
if ( !isset( $arr[$rowID]["children"] ) ) {
$arr[$rowID]["children"] = array();
}
array_push( $arr[$rowID]["children"] , $child );
return $arr;
}
使用两个功能复制代码将作为魅力。
提醒您,阵列中的键碰撞可能存在危险。如果您有两个重复的密钥,则此代码可能无法正常运行。