Newsgroup: it.comp.www.php
Titolo: Una curiosita sugli array

Ciao,
avrei una domanda da porre;
Sto imparando il php leggendo in concomitanza un libro e il manulale
in linea su 
php.net
. Mi sembra di aver trovato una contradizzione fra le due
e volevo chiedere valutazione a voi.
Nel testo c'č un esempio di array associativo:
...
$var["Sabato"] = 20;
$var["Domenica"] = 20;
...
list($giorno,$valore) = each($var);
...
Nel documentazione on-line trovo un bella nota in riferimento alla funzione
"list" che dice:
list() funziona solo su array numerici e si aspetta che gli indici numerici
partano da 0.
Ecco perchč mi domando... :
se le righe qui sopra fanno parte di un array associativo, come č possibile
usare list() che si utilizza solo in array numerici ?
NOTA. lo so che talvolta sarebbe meglio accantonare la teoria e dedicarsi di
piu' alla pratica, ma francamente questa cosa mi crea un po di confusione.
Grazie a tutti.
Saluti B. 


Il codice che riporti è giusto anche se cmq se vuoi scorrere tutto l'array
devi inglobare il list in un ciclo while
Cmq come giustamente noti prova ad usare il codice e a vedere se funge, così
ti togli ogni dubbio.
ciao, ste


Lascia perdere l'uso di list con each che è già un altro discorso prova
invece questi tre script che usano esclusivamente list:
1°:
<?php
$info = array('caffè', 'scuro', 'caffeina');
// assegna a tutte le variabili
list($bevanda, $colore, $componente) = $info;
print "Il $bevanda è $colore e la $componente lo rende speciale.\n";
// assegna solo in parte
list($bevanda, , $componente) = $info;
print "Il $bevanda ha la $componente.\n";
// oppure assegnamo solo l'ultima variabile
list( , , $componente) = $info;
print "Ho voglia di $bevanda!\n";
?>
2°
<?php
$info = array('1'=>'caffè', 'scuro', 'caffeina');
// assegna a tutte le variabili
list($bevanda, $colore, $componente) = $info;
print "Il $bevanda è $colore e la $componente lo rende speciale.\n";
// assegna solo in parte
list($bevanda, , $componente) = $info;
print "Il $bevanda ha la $componente.\n";
// oppure assegnamo solo l'ultima variabile
list( , , $componente) = $info;
print "Ho voglia di $bevanda!\n";
?>
3°:
<?php
$info = array('bevanda'=>'caffè', 'scuro', 'caffeina');
// assegna a tutte le variabili
list($bevanda, $colore, $componente) = $info;
print "Il $bevanda è $colore e la $componente lo rende speciale.\n";
// assegna solo in parte
list($bevanda, , $componente) = $info;
print "Il $bevanda ha la $componente.\n";
// oppure assegnamo solo l'ultima variabile
list( , , $componente) = $info;
print "Ho voglia di $bevanda!\n";
?>
Noterai che solo il primo memorizza correttamente le var mentre il secondo
si perde il primo valore dell'array poichè non c'è un valore per l'indice 0
partendo infatti da 1, ed anche il terzo script darà lo stesso tipo di ris.
del secondo poichè non riconosce il valore dell'indice stringa('bevanda').
Spero sia un pò più chiaro quello che succede.
cia, ste.

 cosě ti togli ogni dubbio.
Inanzitutto grazie per la risposta. Ora la situazione č abbastanza chiara.
Sostanzialmente ho visto dai tuoi esempi che si puo' fare a meno di
"each"; grazie č stato un ottimo chiarimento :o) a questo punto una domanda
sorge spontanea. Sempre dalla documentazione si evince che "each" oltre ad
rilasciare il valore degli elementi nell'array, si occupa anche di
incrementare il contatore degli elementi, quindi riprendendo il tuo esempio
e a titolo di chiarimento each() dovrebbe:
1) fornire i valori che verrano dati in pasto a list()
2) incrementare il contatore da $info[0] a $info[1]
Se non uso "each", come eseguo il secondo punto ?
In merito invece al pezzo di codice che ho scritto nel primo post,
funge perfettamente, e infatti il dubbio era proprio questo:
"secondo la doc. non dovrebbe funzionare... ma invece funziona".
Allo stato attuale non essendo all'interno di un costrutto while,
rilascia solamente il valore del primo elementi.
 
Grazie ancora dei chiarimenti.
Ciao b

 Ciao b
figurati è stato un buon approfondimento anche per me ;)
ciao ste

 figurati è stato un buon approfondimento anche per me ;)
...una rinfrescata hai concetti non fa mai male :o) 
salutoni