簡體   English   中英

多維數組轉換

[英]Multidimensional Array convert

我有這個多維數組:

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

這是代碼,希望它能對您有所幫助。 $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;
}

復制代碼具有兩個功能,將很有吸引力。

提醒您,碰撞陣列中的鍵可能存在危險。 如果您有兩個重復的密鑰,則此代碼可能無法正常工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM