2010-12-29 3 views
10

Ich habe ein Array wie folgt:Wie kann ich ein Array aus den Werten eines anderen Array-Schlüssels erstellen?

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

Allerdings möchte ich von ihm ein Array erstellen, die alle Namen besteht, wäre es so geworden:

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

Ich habe bei array_filter() sah, aber das würde nicht funktionieren, da dies ein mehrdimensionales Array ist!

Frage

Wie kann ich ein Array mit den Werten eines bestimmten Schlüssels (name) von einem anderen mehrdimensionalen Array zu erstellen?

Antwort

23

Neuere Versionen von PHP erlauben die Verwendung array_map() mit einem Funktionsausdruck anstelle eines Funktionsname:

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

Aber wenn Sie eine PHP < 5.3 verwenden, ist es viel einfacher, eine einfache Schleife zu verwenden, da array_map() würde erfordern, eine (wahrscheinlich globale) Funktion für diese einfache Operation zu definieren.

$arr2 = array(); 

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

// $arr2 now contains all names 
+1

Es ist immer noch effizient, eine globale Funktion als eine komplexe Schleife zu erstellen. – Christian

+0

@Christian Sciberras: True, aber es verschmutzt den Namespace mit nicht benötigten Mikrofunktionen. Die Schleife ist hier nicht _that_ komplex. Es ist eine ziemlich einfache Iteration (unter der Annahme, dass das anfängliche Array keine großen Datenmengen enthält). – jwueller

+1

Eigentlich für .. jeder ist schneller. Getestet und es scheint 2 - 3x schneller. Konnte nicht sagen, warum, obwohl .... –

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

Dieser kann mit array_coulmn

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

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

array_column in noch einfacherer Art und Weise durchgeführt werden verwendet, um die Spalten einer Untergruppe zu erhalten.