转置多维数组并用逗号连接值
Transpose multidimensional array and join values with commas
如何根据相同的键按逗号对每个值进行分组?我需要重新定位数组,使行成为列,新行需要用逗号连接在一起以形成字符串。
我的输入:
[
[201767.11, 514324.91, 73205.74],
[349399.51, 647217.10, 3500.00],
[285169.05, 522357.20, 10.00],
[126858.21, 185190.59, 0],
]
想要的结果:
Array
(
[0] => "201767.11, 349399.51, 285169.05, 126858.21",
[1] => "514324.91, 647217.10, 522357.20, 185190.59",
[2] => "73205.74, 3500.00, 10.00,0"
)
使用可以使用array_map
$arr = array_map(null, ...$arr);
$temp = array_map(function($item){
return implode(", ", $item);
},$arr);
输出:
Array
(
[0] => 201767.11, 349399.51, 285169.05, 126858.21
[1] => 514324.91, 647217.1, 522357.2, 185190.59
[2] => 73205.74, 3500, 10, 0
)
Demo.
如果你想使用one-liner
$temp = array_map(function ($item) {return implode(", ", $item); }, array_map(null, ...$arr));
Demo.
注意使用 array_map
和 null
来分组 sub-arrays 获取每个子数组的第 n 个索引。
...
splat operator 我们用它作为函数的参数公开。
只需逐步提取每一列并将其加入。这仅适用于 sub-arrays,如基于 0 的顺序索引所示:
$i = 0;
while($new = array_column($array, $i)) {
$result[] = implode(', ', $new);
$i++;
}
对于其他非0基,non-sequential,non-integer,只是re-index提取和加入之前的sub-arrays:
$array = array_map(function($v) { return array_values($v); }, $array);
移调和内爆的任务可以在 array_map()
的一次调用中完成。用 ...
传播 $array
并将其提供给 array_map()
将有效地隔离数据列——每一列都将在匿名函数体内分解。
代码:(Demo)
$array = [
[201767.11, 514324.91, 73205.74],
[349399.51, 647217.10, 3500.00],
[285169.05, 522357.20, 10.00],
[126858.21, 185190.59, 0],
];
var_export(array_map(fn() => implode(', ', func_get_args()), ...$array));
或者用另一个展开运算符合并列数据(Demo)
var_export(array_map(fn(...$column) => implode(', ', $column), ...$array));
输出(来自任一方法):
array (
0 => '201767.11, 349399.51, 285169.05, 126858.21',
1 => '514324.91, 647217.1, 522357.2, 185190.59',
2 => '73205.74, 3500, 10, 0',
)
如何根据相同的键按逗号对每个值进行分组?我需要重新定位数组,使行成为列,新行需要用逗号连接在一起以形成字符串。
我的输入:
[
[201767.11, 514324.91, 73205.74],
[349399.51, 647217.10, 3500.00],
[285169.05, 522357.20, 10.00],
[126858.21, 185190.59, 0],
]
想要的结果:
Array
(
[0] => "201767.11, 349399.51, 285169.05, 126858.21",
[1] => "514324.91, 647217.10, 522357.20, 185190.59",
[2] => "73205.74, 3500.00, 10.00,0"
)
使用可以使用array_map
$arr = array_map(null, ...$arr);
$temp = array_map(function($item){
return implode(", ", $item);
},$arr);
输出:
Array
(
[0] => 201767.11, 349399.51, 285169.05, 126858.21
[1] => 514324.91, 647217.1, 522357.2, 185190.59
[2] => 73205.74, 3500, 10, 0
)
Demo.
如果你想使用one-liner
$temp = array_map(function ($item) {return implode(", ", $item); }, array_map(null, ...$arr));
Demo.
注意使用 array_map
和 null
来分组 sub-arrays 获取每个子数组的第 n 个索引。
...
splat operator 我们用它作为函数的参数公开。
只需逐步提取每一列并将其加入。这仅适用于 sub-arrays,如基于 0 的顺序索引所示:
$i = 0;
while($new = array_column($array, $i)) {
$result[] = implode(', ', $new);
$i++;
}
对于其他非0基,non-sequential,non-integer,只是re-index提取和加入之前的sub-arrays:
$array = array_map(function($v) { return array_values($v); }, $array);
移调和内爆的任务可以在 array_map()
的一次调用中完成。用 ...
传播 $array
并将其提供给 array_map()
将有效地隔离数据列——每一列都将在匿名函数体内分解。
代码:(Demo)
$array = [
[201767.11, 514324.91, 73205.74],
[349399.51, 647217.10, 3500.00],
[285169.05, 522357.20, 10.00],
[126858.21, 185190.59, 0],
];
var_export(array_map(fn() => implode(', ', func_get_args()), ...$array));
或者用另一个展开运算符合并列数据(Demo)
var_export(array_map(fn(...$column) => implode(', ', $column), ...$array));
输出(来自任一方法):
array (
0 => '201767.11, 349399.51, 285169.05, 126858.21',
1 => '514324.91, 647217.1, 522357.2, 185190.59',
2 => '73205.74, 3500, 10, 0',
)