多维数组转换

时间:2015-10-09 03:01:22

标签: php arrays multidimensional-array

我有这个多维数组:

 $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 ) )

我希望以下结果基于关系idparent_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 )
           )),
        ))
     );

1 个答案:

答案 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;
}

使用两个功能复制代码将作为魅力。

提醒您,阵列中的键碰撞可能存在危险。如果您有两个重复的密钥,则此代码可能无法正常运行。