将PHP二维数组转换为多维数组

时间:2015-07-27 15:07:54

标签: php multidimensional-array foreach

我有一个像这样的二维数组:

$myarray = [
  ['earth', 'europe', 'paris', 'tour eiffel'],
  ['earth', 'europe', 'rome', 'colosseum'],
  ['earth', 'europe', 'rome', 'roman forum'],
  ['earth', 'europe', 'rome'],
  ['earth', 'europe', 'paris', 'arc de triomphe'],
  ['earth', 'north amercica', 'usa', 'new york', 'empire state building'],
  ['earth', 'north amercica'],
  ...
]

我希望将其转换为多维数组,如下所示:

$myMultiArray = [
  'earth' => [
    'europe' => [
      'paris' => ['tour eiffel', 'arc de triomphe']
      'rome' => ['colosseum', 'roman forum']
    ],
    'north america' => [
      'usa' => [
        'new york' => ['empire state building']
      ]
    ]
  ]
]

我尝试了不同的方法,唯一似乎有效的方法如下:

$data = [];
foreach($myarray  as $index=> $el)
{
  if ($index == 0 )
  {
    if (!isset($data[$el]))
    {
      $data[$el] = [];
    }
  }
  else if ($index == 1)
  {
    $data[$myarray[0]][$el] = [];
  }
  // ... etc
}

但这不是一个优雅的解决方案,我认为

1 个答案:

答案 0 :(得分:1)

当子阵列长度为1时,它无法工作

$res = [];

foreach($myarray as $item) {
   $p = &$res;
   for($i=0; $i < count($item)-1; $i++) {
      if(!isset($p[$item[$i]])) $p[$item[$i]] = [];
      $p = &$p[$item[$i]];
      print_r($res);
      }
   $p[] = $item[$i];
}

print_r($res);