部分展平多维数组
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',
),
)
【讨论】:
以上是关于部分展平多维数组的主要内容,如果未能解决你的问题,请参考以下文章