2012-04-22 9 views
27

Tengo un patrón común que estoy seguro de que debe haber una función de matriz incorporada en PHP para manejar, pero simplemente no puede verlo.Obtener elemento específico de cada matriz secundaria

que tienen múltiples arreglos tales como los siguientes:

$testArray = array (
    'subArray1' => array(
     'key1' => "Sub array 1 value 1", 
     'key2' => "Sub array 1 value 1" 
    ), 
    'subArray2' => array(
     'key1' => "Sub array 2 value 1", 
     'key2' => "Sub array 2 value 2" 
    ) 
); 

que necesito para obtener los valores de key1 de cada subconjunto, de las cuales no puede haber cualquier número.

Siempre termino solo haciendo un bucle sobre cada arreglo para obtener los valores requeridos, pero estoy seguro de que debe haber una manera más fácil y más eficiente de manejar esto.

Actualmente estoy usando el siguiente foreach sencilla para analizar las matrices:

$preparedSubs = array(); 

foreach($testArray as $subArray) { 
    $preparedSubs[] = $subArray['key1']; 
} 

Es tan corto como puedo hacerlo, pero como ya he dicho que estoy seguro de que es una construcción de PHP que se ocuparía de este mejor.

+0

¿Desea obtener el valor key1 de cada subArray y almacenarlo en otra matriz? –

+0

@Rohan: preferiblemente el valor que pertenece a esa clave, o la clave y el valor juntos. Voy a publicar el bucle foreach im utilizando actualmente –

Respuesta

38

Antes de PHP 5.5, esta sería la solución más eficiente:

$key = 'key1'; 

$output = array_map(function($item) use ($key) { 
    return $item[$key]; 
}, $testArray); 

A partir de PHP 5.5, ahora hay una función para este array_column (ver COil's answer).

+5

Nota: [PHP Closures] (http://php.net/manual/en/class.closure.php) son compatibles con php 5.3, por lo que este método estará bien desde 5.3 y no es necesario después de 5.5 – Andron

+0

Debajo de la respuesta también funciona :) es mucho más simple Gracias – BlackBurn027

+1

Esta pregunta se realizó antes de que se lanzara PHP 5.5. Actualicé mi pregunta para reflejar que cuando se agregó la respuesta de COil 3 años después :-) – cmbuckley

20

A partir de PHP 5.5 se puede utilizar la función de array_column():

$key = 'key1'; 

$testArray = array (
    'subArray1' => array(
     'key1' => "Sub array 1 value 1", 
     'key2' => "Sub array 1 value 2" 
    ), 
    'subArray2' => array(
     'key1' => "Sub array 2 value 1", 
     'key2' => "Sub array 2 value 2" 
    ) 
); 

$output = array_column($testArray, $key); 
var_dump($output); 

seria:

array(2) { 
    [0]=> 
    string(19) "Sub array 1 value 1" 
    [1]=> 
    string(19) "Sub array 2 value 1" 
} 

La única diferencia con la respuesta aceptada es que se pierde el nombre de clave original, pero piensa que esto no es un problema en tu caso.

+5

+1 para la nueva función nativa. Puede conservar las claves originales con 'array_combine (array_keys ($ testArray), array_column ($ testArray, $ key))'. – cmbuckley

Cuestiones relacionadas