我有一个数组:
[['a', 1], ['b', 1], ['c',2], ['d',2]]
如何拆分它:
[[['a', 1], ['b', 1]], [['c',2], ['d',2]]]
我有一个想法用foreach解决这个问题,但它可能有内置函数的方法吗?
使用foreach绘制草图:
$in = [['a', 1], ['b', 1], ['c',2], ['d',2]];
$out = [];
foreach($in as $i) {
$out[$i[1]][] = $i;
}
答案 0 :(得分:1)
你或多或少拥有我想要的解决方案。
只要您希望用作索引的数据始终位于数组中的相同位置,您就可以像在收集器数组中那样对索引进行硬编码。
如果没有,我会考虑移动到关联数组并为创建数组时要用作索引的值指定名称。
[['a', 'index'=>1] [etc...]]
$out[$i[index]][] = $i;
答案 1 :(得分:0)
唯一特定于多维数组的PHP内置似乎是array_multisort
,除非我们可以对输入数组中包含的数据做出假设,否则这将没有多大帮助。 / p>
对于小型数据集,您的暴力示例对我来说似乎很好。
答案 2 :(得分:0)
没有原生的 php 函数可以对索引数组的索引数组的列值进行分组。如果您在谈论关联数组,那么 array_merge_recursive()
可能会引起您的兴趣。
(Demo)
基本循环语法:(更简洁,通常更快)
$result = [];
foreach ($array as $row) {
$result[$row[1]][] = $row;
}
var_export($result);
函数式语法:(更具声明性,没有声明新的全局变量)
var_export(
array_reduce(
$array,
function ($carry, $row) {
$carry[$row[1]][] = $row;
return $carry;
}
)
);
如果您希望重新索引结果(删除组键),请对结果调用 array_values()
。