2010-12-29 18 views
10

Ho un array come segue:Come posso creare un array dai valori della chiave di un altro array?

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

Tuttavia voglio creare una matrice da esso che si compone di tutti i nomi, quindi sarebbe diventato:

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

Ho guardato array_filter(), ma non funzionerebbe in quanto questo è un array multidimensionale!

Domanda

Come posso creare un array con i valori di una chiave specifica (name) da un altro array multidimensionale?

risposta

23

versioni più recenti di PHP permettono di utilizzare array_map() con una funzione di espressione invece di un nome di funzione:

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

Ma se si utilizza un PHP < 5.3, è molto più facile da usare un ciclo semplice, dal momento che array_map() richiederebbe di definire una funzione (probabilmente globale) per questa semplice operazione.

$arr2 = array(); 

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

// $arr2 now contains all names 
+1

È ancora efficiente creare una funzione globale rispetto a un ciclo complesso. – Christian

+0

@Christian Sciberras: true, ma inquina lo spazio dei nomi con micro-funzioni non necessarie. Il loop non è _that_ complex qui. È una semplice iterazione (supponendo che l'array iniziale non contenga enormi quantità di dati). – jwueller

+1

In realtà, per .. ciascuno è più veloce. Testato e sembra 2 - 3 volte più veloce. Non posso dirvi perché però .... –

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

Questo può essere fatto in modo ancora più semplice utilizzando array_coulmn

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

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

array_column viene utilizzato per ottenere le colonne di un sub-array.

Problemi correlati