Supongamos que tengo la siguiente matriz multidimensional (recuperada de MySQL o un servicio):
array(
array(
[id] => xxx,
[name] => blah
),
array(
[id] => yyy,
[name] => blahblah
),
array(
[id] => zzz,
[name] => blahblahblah
),
)
¿Podemos obtener una matriz de id
s en una llamada de función php " incorporada "? o una línea de código?
Soy consciente del bucle tradicional y obtengo el valor, pero no necesito esto:
foreach($users as $user) {
$ids[] = $user['id'];
}
print_r($ids);
Quizás algunos array_map()
y call_user_func_array()
puedan hacer la magia.
foreach($users as $user) {$ids[] = $user['id'];}
en una línea! pero sabes lo que quiero decir / necesito :-)Respuestas:
Desde php 5.5, puede usar
array_column
:Esta es la opción preferida en cualquier proyecto moderno. Sin embargo, si debe admitir php> 5.5, existen las siguientes alternativas:
Desde php 5.3, puede usar
array_map
con una función anónima, como esta:Antes (técnicamente php 4.0.6+) , debe crear una función anónima con en su
create_function
lugar:fuente
function ($ar) {return $ar['id'];}
valor de retorno de la clave, ¡sería increíble! :-)['ball' => ['golf' => 7, 'basket' => 5, 'soccer' => 6], 'shuttle' => ['badminton' => 1]]
.array_map
con una función de flecha:$ids = array_map(fn ($ar) => $ar['id'], $users);
PHP 5.5+
Al iniciar PHP5.5 +, tiene array_column () disponible, lo que hace que todo lo siguiente sea obsoleto.
PHP 5.3+
$ids = array_map(function ($ar) {return $ar['id'];}, $users);
La solución de @phihag funcionará perfectamente en PHP a partir de PHP 5.3.0, si necesita soporte antes de eso, deberá copiar ese wp_list_pluck.
PHP <5.3
Wordpress 3.1+En Wordpress hay una función llamada wp_list_pluck si estás usando Wordpress que resuelve tu problema.
PHP <5.3Si no está utilizando Wordpress , dado que el código es de código abierto, puede copiar y pegar el código en su proyecto (y cambiar el nombre de la función a algo que prefiera, como array_pick). Ver fuente aquí
fuente
Si
id
es la primera clave en la matriz, esto servirá:Sin embargo, no debe confiar necesariamente en esto. :)
fuente
También puede usar
array_reduce()
si prefiere un enfoque más funcionalPor ejemplo:
O si te gusta ser elegante
Sin embargo, este y todos los métodos anteriores se repiten entre bastidores;)
fuente