2011-12-04 12 views
26

Esempio:È possibile elencare() nell'ultimo imminente lavoro PHP con gli array associativi in ​​qualche modo?

list($fruit1, $fruit2) = array('apples', 'oranges'); 

codice di cui sopra, naturalmente funziona bene, ma il codice qui sotto:

list($fruit1, $fruit2) = array('fruit1' => 'apples', 'fruit2' => 'oranges'); 

dà: Notice: Undefined offset: 1 in....

Esiste un modo per fare riferimento a chiavi denominate in qualche modo con la lista come list('fruit1' : $fruit1) , hai visto qualcosa di simile pianificato per una versione futura?

risposta

39

Provare la funzione extract(). Si creerà le variabili di tutte le vostre chiavi, assegnati ai loro valori associati:

extract(array('fruit1' => 'apples', 'fruit2' => 'oranges')); 
var_dump($fruit1); 
var_dump($fruit2); 
+1

Sì, questo funziona. D'altra parte, è quasi sempre buona pratica fornire un prefisso quando si usa 'extract' a meno che non si sia certi al 100% quali chiavi saranno presenti. – lonesomeday

+1

Sì, lo eseguivo con array_intersect_key() prima con le chiavi previste. – landons

+0

Ma questo non funzionerà se si dispone di un array come si ottiene da 'getimagesize()'. – Jurik

-4
<?php 

function array_list($array) 
{ 
    foreach($array as $key => $value) 
    $GLOBALS[$key] = $value; 
} 

$array = array('fruit2'=>'apples','fruit1'=>'oranges'); 

array_list($array); 

echo $fruit1; // oranges 


?> 
+4

Questo è fondamentalmente ciò che fa ['extract'] (http://php.net/extract). –

-2

considerano questa una soluzione elegante:

<?php 

    $fruits = array('fruit1'=> 'apples','fruit2'=>'oranges'); 

    foreach ($fruits as $key => $value) 
    { 
     $$key = $value; 
    } 
    echo $fruit1; //=apples 

?> 
+2

Scusa, ma in realtà le variabili variabili non sono quasi mai la soluzione "elegante". – Kzqai

+0

Quindi, perché non usare extract()? Fondamentalmente fa quello che stai fornendo la soluzione –

34

Cosa succede ad usare array_values ​​()?

<?php 
    list($fruit1, $fruit2) = array_values(array('fruit1'=>'apples','fruit2'=>'oranges')); 
?> 
+0

Questo metodo è migliore (quindi accettato risposta) se vuoi saltare alcuni tasti – machineaddict

+3

Questo non funziona se i valori nella matrice sono nell'ordine inverso, come 'array ('fruit2' => 'mele', 'fruit1' => 'arance') '. Il valore di 'fruit2' viene assegnato $ fruit1 e viceversa. – jonasfh

1

È abbastanza semplice da implementare.

function orderedValuesArray(array &$associativeArray, array $keys, $missingKeyDefault = null) 
{ 
    $result = []; 
    foreach ($keys as &$key) { 
     if (!array_key_exists($key, $associativeArray)) { 
      $result[] = $missingKeyDefault; 
     } else { 
      $result[] = $associativeArray[$key]; 
     } 
    } 
    return $result; 
} 
$arr = [ 
    'a' => 1, 
    'b' => 2, 
    'c' => 3 
]; 
list($a, $b, $c) = orderedValuesArray($arr, ['a','AAA', 'c', 'b']); 
echo $a, ', ', $b, ', ', $c, PHP_EOL; 

uscita: 1, , 3

  • meno che digita sul lato utilizzo
  • alcun elemento ordine di dipendenza (a differenza array_values)
  • controllo diretto sui nomi delle variabili (a differenza extract) - minore rischio di collisione nome, migliore supporto IDE
1

Se siete nel mio caso:

list() funziona solo su array numerico. Quindi se puoi, lasciando vuoto in fetch() o fetchAll() -> lascia che abbia 2 opzioni: array numerico e array associativo. Funzionerà.

9

Con PHP 7.1;

$array = ['fruit1' => 'apple', 'fruit2' => 'orange']; 

// [] style 
['fruit1' => $fruit1, 'fruit2' => $fruit2] = $array; 

// list() style 
list('fruit1' => $fruit1, 'fruit2' => $fruit2) = $array; 

print $fruit1; // apple 
Problemi correlati