亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

無法將多維數組轉換為單個 php 數組

無法將多維數組轉換為單個 php 數組

PHP
藍山帝景 2023-07-21 16:23:12
我正在嘗試將多維 php 數組轉換為單個數組..但很難做到這一點。我給定的輸入如下:array ( 0 => array ('id' => 3,'text' => 'Name 3','children' => array (  0 =>   array (    'id' => 4,    'text' => 'Name 4',    'children' =>     array (      0 =>       array (        'id' => 5,        'text' => 'Name 5',        'children' =>         array (          0 =>           array (            'id' => 6,            'text' => 'Name 6',          ),        ),      ),    ),  ),  1 =>   array (    'id' => 7,    'text' => 'name 7',  ),),),)我的預期輸出是這樣的:array(3=>'Name 3', 4=>'name 4', 5=>'name 5', 6=>'name 6', 7=>'name 7')到目前為止我已經嘗試過如下:function nestedToSingle($array){    $singleDimArray = [];    foreach ($array as $item) {        if (is_array($item)) {            $singleDimArray = array_merge($singleDimArray, nestedToSingle($item));        } else {            $singleDimArray[] = $item;        }    }    return $singleDimArray;}但它給了我這樣的輸出:array ( 0 => 3, 1 => 'name 3',  2 => 4,  3 => 'Name 4',  4 => 5,  5 => 'name 5',  6 => 6,  7 => 'name 6',  8 => 7,  9 => 'name 7',)
查看完整描述

2 回答

?
千巷貓影

TA貢獻1829條經驗 獲得超7個贊

現在,您將進行循環,直到找到一個不是數組的值并將其寫入您的singleDimArray. 因為您沒有專門設置一個鍵,所以它會獲取默認的數字遞增鍵。因此每個非數組值都會單獨注冊。


請嘗試以下設置singleDimArray為靜態變量的位置,以便每次調用下一個嵌套數組的函數時都可以繼續添加它:


function nestedToSingle( $array )

{

    static $singleDimArray = [];

    

    foreach ( $array as $item ) {


        if ( is_array( $item ) ) {

            if ( array_key_exists( 'id', $item ) && array_key_exists( 'text', $item ) ) {

                $singleDimArray[$item['id']] = $item['text'];

            } 

            if ( array_key_exists( 'children', $item ) && is_array( $item['children'] ) ) {

                nestedToSingle( $item['children'] );

            }

        } 

    }


    return $singleDimArray;

}


查看完整回答
反對 回復 2023-07-21
?
慕桂英3389331

TA貢獻2036條經驗 獲得超8個贊

您可以用于array_walk_recursive此用途。它的回調函數獲取結構中每個葉節點的鍵和值。只需檢查“文本”鍵并收集每個匹配值。


$names = [];

array_walk_recursive($input, function($value, $key) use (&$names) {

    $key == 'text' && $names[] = $value;

});

use (&$names)必須將$names數組放入函數作用域。


查看完整回答
反對 回復 2023-07-21
  • 2 回答
  • 0 關注
  • 128 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號