2014-11-29 10 views
5
$items = array(
     1 => [ 
      "id" => 5 
     ], 

     3 => [ 
      "id" => 6 
     ], 
     4 => [ 
      "id" => 7 
     ], 
    ); 

    var_dump(array_column($items,"id")); 

risultato,PHP array_column - come mantenere le chiavi?

array (size=3) 
    0 => int 5 
    1 => int 6 
    2 => int 7 

Ma come faccio a tenere la chiave di $items in modo da poter ottenere questo seguito?

array (size=3) 
    1 => int 5 
    3 => int 6 
    4 => int 7 

risposta

2
foreach(key($parameters) as $key) 
{ 
print($key); 
} 

È possibile anche memorizzare che si traducono in altre variabili, se desiderato.

e di mostrare entrambe le chiavi e valori provare questo:

foreach ($parameters as $key => $value) { 
echo $key . ' = ' . $value . '<br>'; 
} 
10

vedere se questo potrebbe aiutare

array_filter(array_combine(array_keys($items), array_column($items, 'id'))); 
+0

Sarà questo lavoro, anche se alcuni degli elementi non hanno un 'id'? –

+0

No, questo non è un codice generico. Funzionerà per la domanda posta sopra però. –

1

Un'altra alternativa è quella di utilizzare array_map

$result = array_map(function($item) {return $item['id'];}, $items);

+0

Questa è una soluzione per l'esempio, ma nessuna soluzione valida al problema. Se si dispone di un array con un "sottoarray" che non contiene una coppia chiave-valore con l'id della chiave, questa coppia si troverà comunque nel risultato, come invece con array_column. – garyee

-1

Per la vostra esempio con una sola colonna id

array_map('current', $items); 
+0

Questa è una soluzione per l'esempio, ma nessuna soluzione valida al problema. Se si dispone di un array con un "sottoarray" che non contiene una coppia chiave-valore con l'id della chiave, questa coppia si troverà comunque nel risultato, come invece con array_column. – garyee

4

Cercando la stessa soluzione e combinare alcuni trucchi, ho creato questo:

$userdb=Array 
(
    "test1" => array 
    (
     'uid' => '100', 
     'name' => 'Sandra Shush', 
     'url' => 'urlof100' 
    ), 
    "test2" => array 
    (
     'uid' => '5465', 
     'name' => 'Stefanie Mcmohn', 
     'pic_square' => 'urlof100' 
    ), 
    "test3" => array 
    (
     'uid' => '40489', 
     'name' => 'Michael', 
     'pic_square' => 'urlof40489' 
    ) 
); 

echo $key = array_search(
    40489, 
    array_filter(
     array_combine(
      array_keys($userdb), 
      array_column(
       $userdb, 'uid' 
      ) 
     ) 
    ) 
); 

Il risultato è 'test3'.

Lavorare in numeri di array o matrici con nome.

1

penso che questo sia il modo più veloce per tenere le chiavi, senza anse e le iterazioni

array_diff(array_combine(array_keys($items), array_column($items, 'id')), [null]) 
Problemi correlati