2010-12-29 2 views
10

次のように私は配列を持っている:別の配列のキーの値から配列を作成するにはどうすればよいですか?

$arr1 = array(
    0 => array(
    'name' => 'tom', 
    'age' => 22 
), 
    1 => array(
    'name' => 'nick', 
    'age' => 18 
) 
); 

私はそれがなるので、すべての名前で構成され、それから配列を作成したいしかし:

$arr2 = array('tom', 'nick'); 

私はarray_filter()を見てきました、これは多次元配列なので動作しません!

質問

どのように私は別の多次元配列から特定のキー(name)の値を持つ配列を作成することができますか? PHPの

答えて

23

新しいバージョンではなく、関数名の関数式でarray_map()を使用できるように:

$arr2 = array_map(function($person) { 
    return $person['name']; 
}, $arr1); 

しかし、あなたはPHP < 5.3を使用している場合、array_map()以来、単純なループを使用する方がはるかに簡単ですこの簡単な操作のために(たぶん大域的な)関数を定義する必要があります。

$arr2 = array(); 

foreach ($arr1 as $person) { 
    $arr2[] = $person['name']; 
} 

// $arr2 now contains all names 
+1

複雑なループよりもグローバル関数を作成することは効率的です。 – Christian

+0

@Christian Sciberras:Trueですが、不要なマイクロ関数で名前空間を汚染します。ループはここでは複雑ではありません。これは非常に単純な繰り返しです(初期配列に大量のデータが含まれていないと仮定して)。 – jwueller

+1

実際、..それぞれがより速いです。それをテストしたところ、2〜3倍高速だったようです。 ... –

3
$array = array(0 => array('name' => 'tom', 'age' => 22), 1 => array('name' => 'nick', 'age' => 18)); 
foreach($array as $arr => $a){ 
    $names[] = $array[$arr]["name"]; 
} 

print_r($names); //Array ([0] => tom [1] => nick) 
8

これはarray_columnは、サブアレイの列を取得するために使用される。array_coulmn

$arr2= array_column($arr1, 'name'); 

print_r($arr2); //Array ([0] => tom [1] => nick) 

を使用することによってより一層簡単に行うことができます

関連する問題