Załóżmy, że mam następującą tablicę wielowymiarową (pobraną z MySQL lub usługi):
array(
array(
[id] => xxx,
[name] => blah
),
array(
[id] => yyy,
[name] => blahblah
),
array(
[id] => zzz,
[name] => blahblahblah
),
)
Czy możemy uzyskać tablicę id
s w jednym „ wbudowanym ” wywołaniu funkcji php? czy jedna linia kodu?
Zdaję sobie sprawę z tradycyjnego zapętlania i uzyskiwania wartości, ale nie potrzebuję tego:
foreach($users as $user) {
$ids[] = $user['id'];
}
print_r($ids);
Może trochę array_map()
i call_user_func_array()
potrafią zrobić magię.
foreach($users as $user) {$ids[] = $user['id'];}
w jednej linii! ale wiesz, co mam na myśli / potrzebuję :-)Odpowiedzi:
Od php 5.5 możesz używać
array_column
:Jest to preferowana opcja w każdym nowoczesnym projekcie. Jeśli jednak musisz obsługiwać php> 5.5, istnieją następujące alternatywy:
Od php 5.3 możesz używać
array_map
z anonimową funkcją, taką jak ta:Przed (technicznie php 4.0.6+) musisz utworzyć anonimową funkcję z
create_function
:źródło
function ($ar) {return $ar['id'];}
zwracanej wartości klucza, byłaby niesamowita! :-)['ball' => ['golf' => 7, 'basket' => 5, 'soccer' => 6], 'shuttle' => ['badminton' => 1]]
.array_map
z funkcją strzałki:$ids = array_map(fn ($ar) => $ar['id'], $users);
PHP 5.5+
Rozpoczynając PHP5.5 + masz dostępną tablicę_kolumny () , co sprawia, że wszystkie poniższe elementy są nieaktualne.
PHP 5.3+
$ids = array_map(function ($ar) {return $ar['id'];}, $users);
Rozwiązanie autorstwa @phihag będzie działało bezbłędnie w PHP począwszy od PHP 5.3.0, jeśli wcześniej potrzebujesz wsparcia, będziesz musiał skopiować to wp_list_pluck.
PHP <5.3.0
Wordpress 3.1+W Wordpress jest funkcja o nazwie wp_list_pluck Jeśli używasz Wordpressa, która rozwiązuje Twój problem.
PHP <5.3.0Jeśli nie używasz Wordpress , ponieważ kod jest open source, możesz skopiować, wkleić kod do swojego projektu (i zmienić nazwę funkcji na preferowaną, np. Array_pick). Zobacz źródło tutaj
źródło
Jeśli
id
jest to pierwszy klucz w tablicy, to wystarczy:Jednak niekoniecznie powinieneś na tym polegać. :)
źródło
Możesz również użyć,
array_reduce()
jeśli wolisz bardziej funkcjonalne podejścieNa przykład:
Lub jeśli lubisz być fantazyjny,
Ta i wszystkie powyższe metody działają jednak w pętli za kulisami;)
źródło