2012-04-22 22 views
27

Ho un modello comune che sono sicuro che ci deve essere una funzione di array incorporata in PHP da gestire, ma semplicemente non può vederla.Ottieni elementi specifici da ciascun sotto-array

ho più array come il seguente:

$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" 
    ) 
); 

devo ottenere i valori key1 da ciascuna sottomatrice, di cui ci può essere qualsiasi numero.

Finisco sempre il loop su ogni array per ottenere i valori richiesti, ma sono sicuro che ci deve essere un modo più semplice ed efficiente per gestirlo.

Attualmente sto usando la seguente semplice foreach per analizzare le matrici:

$preparedSubs = array(); 

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

E 'il più breve posso farlo, ma come ho detto sono sicuro che ci sia un costrutto PHP che avrebbe gestito questo meglio.

+0

Si desidera ottenere il valore chiave1 da ciascun sottoarray e memorizzarlo in un altro array? –

+0

@Rohan - preferibilmente il valore che appartiene a quella chiave, o sia la chiave che il valore insieme. Ill postare il ciclo foreach im usando attualmente –

risposta

38

Prima PHP 5.5, questa sarebbe la soluzione più efficiente:

$key = 'key1'; 

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

partire da PHP 5.5, v'è ora una funzione array_column per questo (vedi COil's answer).

+5

Nota: [PHP Closures] (http://php.net/manual/en/class.closure.php) sono supportati da php 5.3, quindi questo metodo andrà bene da 5.3 e non è necessario dopo 5.5 – Andron

+0

Anche qui la risposta funziona :) è molto più semplice Grazie – BlackBurn027

+1

Questa domanda è stata posta prima del rilascio di PHP 5.5. Ho aggiornato la mia domanda per riflettere sul fatto che quando la risposta di COil è stata aggiunta 3 anni dopo :-) – cmbuckley

20

Dal PHP 5.5 è possibile utilizzare la funzione di 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); 

Will uscita:

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

L'unica differenza con la risposta accettata è che si perde il nome della chiave originale, ma io pensa che questo non sia un problema nel tuo caso.

+5

+1 per la nuova funzione nativa. È possibile mantenere le chiavi originali con 'array_combine (array_keys ($ testArray), array_column ($ testArray, $ chiave))'. – cmbuckley

Problemi correlati