2012-12-02 19 views
6

un'occhiata a questo:chiave php() in foreach-loop strano comportamento o ottenere la chiave successivo ciclo foreach

<?php 
    $array = array('a' => '…', 'b' => '…', 'c' => '…', 'd' => '…', 'e' => '…', 'f' => '…'); 
    foreach ($array as $key => $val){ 
     echo "current key: $key, next key: ".key(($array))."<br>"; 
    } 
?> 

USCITA:

current key: a, next key: b 
current key: b, next key: c 
current key: c, next key: d 
current key: d, next key: e 
current key: e, next key: f 
current key: f, next key: a 

ero alla ricerca di una funzione per ottenere la prossima chiave di un array associativo all'interno di un ciclo foreach. ho provato un po 'e improvvisamente ha funzionato. (come puoi vedere nel mio esempio).

MA PERCHE 'FUNZIONA QUESTO? Ha senso? … non a me! Puoi spiegarmi questo?

È a causa della parte key(($array)) ma perché? Voglio dire .. è stato un errore .. volevo scrivere key($array) ma ho dimenticato di cancellare le 2 parentesi graffe. Quindi è stata una coincidenza !!!

Perché si comporta in questo modo? Voglio dire, va bene ma ... ????

+3

Interessante. Se attivi la segnalazione degli errori, vedrai molti errori. Le parentesi aggiuntive stanno infrangendo il riferimento alla variabile diretta. '$ a' è una variabile,' ($ a) 'è un'espressione risultante nel * valore * di' $ a'. 'key' si aspetta una variabile passata per riferimento. Non sono sicuro di cosa esattamente "chiave" faccia con quello e perché si comporta come si comporta, ma lo archiverei sotto un comportamento sbagliato e indefinito. – deceze

+1

whoa, se questo è inteso comportamento fantastico. Ci sono state così tante volte che avrei potuto usare qualcosa di simile. –

+0

ma cosa suggerisci? devo tenerlo così? –

risposta

4

In base al manuale PHP per key, key() restituisce l'elemento index della posizione corrente dell'array.

Il problema non è tanto con key, né con le doppie parentesi. Key riceve l'array come riferimento, quindi le doppie parentesi non stanno facendo molto.

Il comportamento deriva da foreach. Quando foreach scorre attraverso l'array, diverse versioni di PHP si comportano in modo diverso impostando il puntatore interno dell'array , che è quello che key(), next(), current(), ecc., Stanno guardando quando vengono chiamati.

Gli array in PHP non sono come matrici nella maggior parte delle lingue; sono veramente oggetti (specialmente gli array associativi). Pensa che sono come liste concatenate (sono non elenchi collegati, ma vanno solo con me a scopo illustrativo) - quando esegui l'iterazione, devi sapere dove ti trovi attualmente e dove sarai prossimo.

cosa è apparentemente accadendo qui è che su qualunque versione di PHP è in esecuzione, foreach è l'impostazione della current puntatore interno all'elemento next al all'inizio del ciclo for, subito dopo aver impostato le variabili $key e $value in il tuo codice.

Avrei sicuramente non dipende da questo comportamento, in quanto i successivi aggiornamenti di PHP potrebbero interrompere questo codice. È solo una divertente coincidenza di questa versione specifica. Se si desidera la chiave successiva, digitare , sostituire il ciclo foreach. Il manuale PHP su next() ha buoni esempi, e assicurati di controllare anche prev(), each() e le altre funzioni nella sezione "vedi anche".

+0

+100, sicuramente una bella risposta. –

Problemi correlati