从多维数组构建新的多维数组并解释顺序


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上搜索了另一个我可以学习的例子,但我还没有找到任何东西。。。如果还有其他例子,请随时为我指明正确的方向。

我感谢您的帮助!

运行所有这些的一种非常简单的方法是在RecursiveArrayTerator上使用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'];
    ];
}