2010-12-29 18 views
10

Mam tablicę następująco:Jak mogę utworzyć tablicę z wartości klucza innej tablicy?

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

jednak Chcę utworzyć tablicę z nim, które składa się ze wszystkich imion, więc byłoby stać:

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

Mam spojrzał na array_filter(), ale to by nie działało, ponieważ jest to tablica wielowymiarowa!

Pytanie

Jak utworzyć tablicę z wartościami określonego klucza (name) z innego wielowymiarowej tablicy?

Odpowiedz

23

Nowsze wersje PHP pozwalają użyciu array_map() z wyrażeniem funkcyjnym zamiast nazwy funkcji:

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

Ale jeśli używasz PHP < 5.3, jest znacznie łatwiejszy w użyciu prostej pętli, ponieważ array_map() wymagałoby zdefiniowania (prawdopodobnie globalnej) funkcji dla tej prostej operacji.

$arr2 = array(); 

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

// $arr2 now contains all names 
+1

Ciągle wydajne jest tworzenie funkcji globalnej niż złożonej pętli. – Christian

+0

@Christian Sciberras: To prawda, ale zanieczyszcza przestrzeń nazw z niepotrzebnymi mikro-funkcjami. Pętla nie jest tutaj złożona. Jest to dość prosta iteracja (zakładając, że początkowa tablica nie zawiera ogromnych ilości danych). – jwueller

+1

Właściwie dla .. każdy jest szybszy. Testowane i wydaje się 2-3 razy szybsze. Nie można powiedzieć, dlaczego ... –

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

Można to zrobić w prosty sposób jeszcze bardziej za pomocą array_coulmn

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

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

array_column jest używany, aby uzyskać kolumny sub-macierzy.