簡體   English   中英

從多維數組構建新的多維數組並解釋順序

[英]Building new multidimensional array from multidimensional array and interpreting the order

我一直在嘗試使它工作7.5個小時,但是我的大腦已經融化了。

我有一個類似於以下內容的多維數組:

array (
  'expanded' => true,
  'key' => 'root_1',
  'title' => 'root',
  'children' => 
  array (
    0 => 
    array (
      'folder' => false,
      'key' => '_1',
      'title' => 'News',
      'data' => 
      array (
        'id' => '3',
        'parent_id' => 0,
      ),
    ),
    1 => 
    array (
      'folder' => true,
      'key' => '_2',
      'title' => 'Animations',
      'data' => 
      array (
        'id' => '5',
        'parent_id' => '0',
      ),
      'children' => 
      array (
        0 => 
        array (
          'folder' => false,
          'key' => '_3',
          'title' => 'The Simpsons',
          'data' => 
          array (
            'id' => '1',
            'parent_id' => '5',
          ),
        ),
        1 => 
        array (
          'folder' => false,
          'key' => '_4',
          'title' => 'Futurama',
          'data' => 
          array (
            'id' => '4',
            'parent_id' => '5',
          ),
        ),
      ),
    ),
    2 => 
    array (
      'folder' => true,
      'key' => '_5',
      'title' => 'Episodes',
      'data' => 
      array (
        'id' => '6',
        'parent_id' => '0',
      ),
      'children' => 
      array (
        0 => 
        array (
          'folder' => true,
          'key' => '_6',
          'title' => 'UK Episodes',
          'data' => 
          array (
            'id' => '7',
            'parent_id' => '6',
          ),
          'children' => 
          array (
            0 => 
            array (
              'folder' => false,
              'key' => '_7',
              'title' => 'Coupling',
              'data' => 
              array (
                'id' => '2',
                'parent_id' => '7',
              ),
            ),
          ),
        ),
        1 => 
        array (
          'folder' => true,
          'key' => '_8',
          'title' => 'AU Episodes',
          'data' => 
          array (
            'id' => '8',
            'parent_id' => '6',
          ),
        ),
      ),
    ),
  ),
)

我需要搜索所有子數組,並構建一個新的數組,以返回每個子代的id和parent_id,並還要根據它們在原始數組中出現的順序來解釋數組子代的順序。

輸出需要結束這樣的事情:

Array
(
    [0] => Array
        (
            [id] => 1
            [parent_id] => 5
            [order] => 1
        )

    [1] => Array
        (
            [id] => 2
            [parent_id] => 7
            [order] => 1
        )

    [2] => Array
        (
            [id] => 4
            [parent_id] => 5
            [order] => 2
        )
)

我嘗試了以下遞歸方法 ,但是我的代碼變得一團糟,那就是在我甚至沒有嘗試設置項目順序之前。

我還搜索了stackoverflow,以尋找另一個可以學習的示例,但是我還沒有發現任何內容。

感謝您的協助!

運行所有這些方法的一種超級簡單的方法是在RecursiveArrayIterator上使用RecursiveIteratorIterator ,拔出'data'數組並按順序添加鍵。


例:

$array = []; // Your starting array with stuff in it.

$iterator = new RecursiveIteratorIterator(
    new RecursiveArrayIterator($array),
    RecursiveIteratorIterator::SELF_FIRST
);
$result = [];
foreach ($iterator as $key => $value) {
    if (isset($value['data'])) {
        $result[] = array_merge($value['data'], ['order' => $key]);
    }
}

print_r($result);

輸出:

Array
(
    [0] => Array
        (
            [id] => 3
            [parent_id] => 0
            [order] => 0
        )

    [1] => Array
        (
            [id] => 5
            [parent_id] => 0
            [order] => 1
        )

    [2] => Array
        (
            [id] => 1
            [parent_id] => 5
            [order] => 0
        )

    [3] => Array
        (
            [id] => 4
            [parent_id] => 5
            [order] => 1
        )

    [4] => Array
        (
            [id] => 6
            [parent_id] => 0
            [order] => 2
        )

    [5] => Array
        (
            [id] => 7
            [parent_id] => 6
            [order] => 0
        )

    [6] => Array
        (
            [id] => 2
            [parent_id] => 7
            [order] => 0
        )

    [7] => Array
        (
            [id] => 8
            [parent_id] => 6
            [order] => 1
        )

)

如果我了解您要正確執行的操作,則以下代碼段應該可以正常工作。 不需要每個子數組中的命令鍵,因為當您在$new_array插入新的數組索引時,會自動記錄該鍵。

讓我知道您是否還有其他問題。

$new_array = [];

$current_array = []; //with all your data

foreach($current_array['children'] as $array) {
    $new_array[] = [
        'id' => $array['data']['id'],
        'parent_id' => $array['data']['parent_id'];
    ];
}

暫無
暫無

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

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