将数组重构(转置)为唯一键


Refactor (transpose) array to unique keys

我正在转置一些数据库结果以生成统计信息。

原始阵列:

Array
(
    [0] => Array
        (
            [a] => apple
            [b] => beer
            [c] => chocolate
        )
    [1] => Array
        (
            [a] => aardvark
            [b] => bear
            [c] => chupacabra
        )
)

期望的结果:

Array
(
    [a] => Array
        (
            [0] => apple
            [1] => aardvark
        )
    [b] => Array
        (
            [0] => beer
            [1] => bear
        )
    [c] => Array
        (
            [0] => chocolate
            [1] => chupacabra
        )
)

示例代码:

$stats[] = array(
    'a' => 'apple',
    'b' => 'beer',
    'c' => 'chocolate'
);
$stats[] = array(
    'a' => 'aardvark',
    'b' => 'bear',
    'c' => 'chupacabra'
);
foreach (array_keys($stats[0]) as $key){
    $data[$key] = array_column($stats, $key);
}

上面的代码使用 array_keys 和 array_column (php 5.5) 工作正常。

  • 有没有更优雅的方法或php函数来达到相同的结果?

  • 这种重构的通用名称是什么?

编辑:

根据下面的评论,正确的术语是"转置"

我以为这种事情有一个array_*函数,但我不记得了,所以我去了PHP文档 事实证明,array_merge_recursive正是你想要的。

array_merge_recursive($array1, $array2)

您将数组组合在一个数组中,因此您必须使用数组的内容填充函数的参数。

call_user_func_array("array_merge_recursive", $stats)

那一行应该做你要找的。