2012-04-22 26 views
27

私は共通のパターンを持っていますが、PHPでは処理するための組み込み配列関数が必要ですが、それを見ることはできません。私は、任意の数が存在することができ、各サブアレイからkey1値を取得する必要が各サブ配列から特定の要素を取得する

$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" 
    ) 
); 

Iは、次のような複数のアレイを有します。

私はいつも必要な値を得るために各配列をループしてしまいますが、これを処理するためのより簡単で効率的な方法が必要であると確信しています。

私は現在の配列を解析するために、以下の簡単なforeachのを使用しています:それは私がそれを作ることができるように短いです

$preparedSubs = array(); 

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

が、私はこれを処理するでしょうPHP構文があると確信して言ったようにより良い。 PHP 5.5の前に

+0

それぞれのsubArrayからkey1の値を取得し、それを別の配列に格納しますか? –

+0

@Rohan - 好ましくはそのキーに属する値、またはキーと値の両方を一緒にします。私は現在foreachループを投稿しています –

答えて

38

、これが最も効率的な解決策になる:PHP 5.5のよう

$key = 'key1'; 

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

、このためarray_column関数は(COil's answerを参照してください)今そこにあります。

+5

注:[PHP Closures](http://php.net/manual/en/class.closure.php)はPHP 5.3からサポートされているので、このメソッドは5.3からOKです。 〜の後に必要です。 – Andron

+0

以下の答えもあまりにも簡単です:)ありがとうございました – BlackBurn027

+1

この質問はPHP 5.5がリリースされる前に尋ねられました。 COilの答えが3年後に追加されたときにそれを反映するために私の質問を更新しました:-)新しいネイティブ関数のために – cmbuckley

20

あなたはarray_column()機能を使用することができますPHP 5.5のよう:

$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" 
} 

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

+5

+1。 'array_combine(array_keys($ testArray)、array_column($ testArray、$ key))'で元のキーを保持することができます。 – cmbuckley

関連する問題