31

私は、処理するために PHP に組み込みの配列関数が必要であると確信している共通のパターンを持っていますが、それを見ることはできません。

次のような複数の配列があります。

$testArray = array (
    'subArray1' => array(
        'key1' => "Sub array 1 value 1",
        'key2' => "Sub array 1 value 1"
    ),
    'subArray2' => array(
        'key1' => "Sub array 2 value 1",
        'key2' => "Sub array 2 value 2"
    )
);

各 subArray から値を取得する必要がありますが、そのkey1値はいくつでもかまいません。

私は常に各配列をループして必要な値を取得するだけですが、これを処理するためのより簡単で効率的な方法があるはずです。

現在、次の単純な foreach を使用して配列を解析しています。

$preparedSubs = array();

foreach($testArray as $subArray) {
    $preparedSubs[] = $subArray['key1'];
}

私ができる限り短くしていますが、私が言ったように、これをより適切に処理する PHP 構造があると確信しています。

4

2 に答える 2

39

PHP 5.5 より前では、これが最も効率的なソリューションでした。

$key = 'key1';

$output = array_map(function($item) use ($key) {
    return $item[$key];
}, $testArray);

PHP 5.5 の時点で、array_columnこのための関数が用意されています ( COil の回答を参照)。

于 2012-04-22T13:37:30.377 に答える
27

PHP 5.5 以降では、 array_column()関数を使用できます。

$key = 'key1';

$testArray = array (
    'subArray1' => array(
        'key1' => "Sub array 1 value 1",
        'key2' => "Sub array 1 value 2"
    ),
    'subArray2' => array(
        'key1' => "Sub array 2 value 1",
        'key2' => "Sub array 2 value 2"
    )
);

$output = array_column($testArray, $key);
var_dump($output);

出力します:

array(2) {
  [0]=>
  string(19) "Sub array 1 value 1"
  [1]=>
  string(19) "Sub array 2 value 1"
}

受け入れられた回答との唯一の違いは、元のキー名を失うことですが、これは問題ではないと思います。

于 2015-01-21T11:09:20.567 に答える