【问题标题】:convert indexed multidimensional array to associative multidimensional array将索引多维数组转换为关联多维数组
【发布时间】:2016-08-13 16:58:41
【问题描述】:

我有一个带有嵌套类别的索引数组,如下所示:

array (
  0 => 
  array (
    'name' => 'Furniture',
    'id' => 'b3cdd1k',
    'content' => 
    array (
      0 => 
      array (
        'name' => 'Tables',
        'id' => 'nw24ga3',
        'content' => 
        array (
          0 => 
          array (
            'name' => 'Wooden tables',
            'id' => 'ba5lgaz',
          ),
          1 => 
          array (
            'name' => 'Glass tables',
            'id' => 'rqt91gz',
          ),
        ),
      ),
    ),
  ),
  1 => 
  array (
    'name' => 'Lamps',
    'id' => 'vb1a4nf',
  ),
  2 => 
  array (
    'name' => 'Doors',
    'id' => 'a5l4gal',
    'content' => 
    array (
      0 => 
      array (
        'name' => 'Entrance doors',
        'id' => 'qwg30fb',
      ),
    ),
  ),
)

有没有优雅的方法将其转换为关联数组(其中键是 id)并保持嵌套结构?

转换后我除了这样的东西:

array (
  'b3cdd1k' => 
  array (
    'name' => 'Furniture',
    'content' => 
    array (
      'nw24ga3' => 
      array (
        'name' => 'Tables',
        'content' => 
        array (
          'ba5lgaz' => 
          array (
            'name' => 'Wooden tables',
          ),
          'rqt91gz' => 
          array (
            'name' => 'Glass tables',
          ),
        ),
      ),
    ),
  ),
  'vb1a4nf' => 
  array (
    'name' => 'Lamps',
  ),
  'a5l4gal' => 
  array (
    'name' => 'Doors',
    'content' => 
    array (
      'qwg30fb' => 
      array (
        'name' => 'Entrance doors',
      ),
    ),
  ),
)

【问题讨论】:

  • 向我们展示你是如何创建这个数组的。我假设它来自数据库查询。那是你应该摆弄的地方
  • 我是从外部 API 获取的,无法以其他格式接收

标签: php multidimensional-array


【解决方案1】:

你可以试试这个 - 不是最优雅的,但似乎有效:

function convert(&$a)
{
  $result = Array();
  foreach($a as $k=>&$v)
  {
    $result[$v['id']]['name'] = $v['name'];
    if(is_array($v['content'])) $result[$v['id']]['content'] = convert($v['content']);
  }
  return $result;
}

if(count($array) != 0) $result = convert($array);

【讨论】:

  • 谢谢,我试试!
猜你喜欢
  • 2021-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-05
  • 2021-02-14
  • 2015-10-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多