如何将带有字母数字键/ parent_key的数组转换为嵌套数组?

时间:2012-02-07 19:07:11

标签: php arrays recursion

如何将下面的数组转换为嵌套数组?

请参阅预期的结果代码。

顺便说一句,在我的实际应用程序中,我使用SHA-1哈希值作为键和&父键。

因此,所有密钥都是唯一的。

感谢。

$arr = array(
  array(
      'key' => 'apple',
      'parent_key' => 'root',
      'name' => '1'
       ),
  array(
        'key' => 'banana',
        'parent_key' => 'root',
        'name' => '2'
       ),
  array(
      'key' => 'sun',
      'parent_key' => 'apple',
      'name' => '1.1'
  ),
  array(
      'key' => 'moon',
      'parent_key' => 'root',
      'name' => '3'
  ),
  array(
      'key' => 'mars',
      'parent_key' => 'sun',
      'name' => '1.1.1'
      )
);

预期结果:

$arr = array(
  array(
       'key' => 'apple',
       'parent_key' => 'root',
       'children' => array(
                          'key' => 'sun',
                          'parent_key' => 'apple',
                          'name' => '1.1',
                          'children' => array(
                                             'key' => 'mars',
                                             'parent_key' => 'sun',
                                             'name' => '1.1.1'      
                                             )
                          )
  ),
  array(
       'key' => 'banana',
       'parent_key' => 'root',
       'name' => '2'
  ),
  array(
       'key' => 'moon',
       'parent_key' => 'root',
       'name' => '3'      
  )
);

1 个答案:

答案 0 :(得分:0)

foreach($initial_array as $subarray){
    if($subarray['parent_key'] == 'root'){
        $final_array[$subarray['key']] = $subarray;
    }else{
        $final_array[$subarray['parent_key']]['children'][$subarray['key']] = $subarray;
    }
}

这里唯一的一点是,看看你的例子,这段代码只能处理一个深度。例如,如果您有'parent_key' => 'sun',则无效。