部分展平多维数组

Posted

技术标签:

【中文标题】部分展平多维数组【英文标题】:Partially-flattening a multi-dimensional array 【发布时间】:2011-09-05 20:12:12 【问题描述】:

什么是转换数组的好方法,如下所示:

Array (
    [0] = Array (
            [0] = Array (
                    [key] = val
                    [key2] = val2
                )

        )
    [1] = Array (
            [0] = Array (
                    [key] = val
                    [key2] = val2
                )

        )
)

Array (
    [0] = Array (
            [key] = val
            [key] = val2
        )
    [1] = Array (
            [key] = val
            [key] = val2
        )
)

【问题讨论】:

【参考方案1】:

这可能是一种相当巧妙的方式

$output=array_map('array_shift', $input);

这使用array_map 在输入数组的每个元素上调用array_shift,这将为您提供每个子数组的第一个元素!漂亮的小单线,不是吗?

虽然不错,但它的效率并不高,因为 array_shift 所做的工作比我们需要的要多 - 一个简单的循环实际上要快得多(我刚刚对一个包含 1000 个元素的数组进行了快速基准测试,这大约快了 6 倍)

$output=array();
foreach ($input as $element)
    $output[]=$element[0];

【讨论】:

有趣的是,我也这样做了,希望它更快——不过它与 array_shift 差不多。【参考方案2】:
$new=array();
foreach($array as $a)
  $new[]=array_shift($a);

【讨论】:

大声笑是的,让我让它更容易一点;)【参考方案3】:

如果您的数组是 $my_array 并且有 2 个元素,您可以:

$my_array = array_merge($my_array[0], $my_array[1]);

希望有所帮助。

【讨论】:

【参考方案4】:
$new=array();
foreach ($array as $a)
$new[]=$a[0];


print_r($new);

【讨论】:

你不是说$new[] = $a[0];吗? 另外你不应该先创建新数组吗? $new = array();? 使用代码 sn-ps 我假设已经了解了一些基础知识。【参考方案5】:

我想每个人都想过这个。这正是array_column() 所做的。

代码:(Demo)

$array=[
    [
        ['key'=>'val','key2'=>'val2']
    ],
    [
        ['key'=>'val','key2'=>'val2']
    ]
];
var_export(array_column($array,0));

输出:

array (
  0 => 
  array (
    'key' => 'val',
    'key2' => 'val2',
  ),
  1 => 
  array (
    'key' => 'val',
    'key2' => 'val2',
  ),
)

【讨论】:

以上是关于部分展平多维数组的主要内容,如果未能解决你的问题,请参考以下文章

展平多维数组连接键[重复]

Javascript:使用递归将多维数组展平到位

在 PHP 中将多维关联数组展平为一维引用数组

用于展平多维数组的函数[重复]

用数组映射展平多维数组

如何在不使用 NumPy 复制的情况下展平多维数组的轴?