3

統計生成のためにいくつかのデータベース結果を転置しています。

元の配列:

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関数はありますか?

  • この種のリファクタリングの一般名は何ですか?

編集:

以下のコメントによると、これの正しい用語は「移調」です

4

1 に答える 1

3

そのような機能があると思っていたarray_*のですが、思い出せなかったので、PHP のドキュメントに行きましたarray_merge_recursive

array_merge_recursive($array1, $array2)

単一の配列に結合する配列があるため、関数の引数に配列の内容を入力する必要があります。

call_user_func_array("array_merge_recursive", $stats)

その1行で、探していることができるはずです。

于 2013-10-31T02:53:38.047 に答える