2010-12-29 18 views
10

que tienen una matriz como sigue:¿Cómo puedo crear una matriz a partir de los valores de la clave de otra matriz?

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

Sin embargo, quiero crear una matriz de ella, que se compone de todos los nombres, por lo que se convertiría en:

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

He mirado array_filter(), pero eso no funcionaría ya que es una matriz multidimensional.

Pregunta

¿Cómo puedo crear una matriz con los valores de una clave específica (name) de otra matriz multidimensional?

Respuesta

23

Las nuevas versiones de PHP permiten utilizar array_map() con una expresión de función en lugar de un nombre de función:

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

Pero si usted está usando un PHP < 5.3, es mucho más fácil de utilizar un bucle simple, ya que array_map() requeriría definir una función (probablemente global) para esta operación simple.

$arr2 = array(); 

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

// $arr2 now contains all names 
+1

Todavía es eficiente crear una función global que un bucle complejo. – Christian

+0

@Christian Sciberras: Es cierto, pero contamina el espacio de nombres con micro-funciones innecesarias. El bucle no es tan complejo aquí. Es una iteración bastante simple (suponiendo que la matriz inicial no contenga grandes cantidades de datos). – jwueller

+1

En realidad, para .. cada uno es más rápido. Lo probé y parece 2 - 3 veces más rápido. Sin embargo, no podría decir por qué ... –

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

Esto se puede hacer en forma aún más sencilla mediante el uso de array_coulmn

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

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

array_column se utiliza para obtener las columnas de una sub-matriz.

Cuestiones relacionadas