转置多维数组并用逗号连接值

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_mapnull 来分组 sub-arrays 获取每个子数组的第 n 个索引。

... splat operator 我们用它作为函数的参数公开。

参考:implode, array-map

只需逐步提取每一列并将其加入。这仅适用于 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',
)