Newsgroup: it.lavoro.professioni.webmaster
Titolo: Scoperto adesso:  chiavi numeriche di array

In realtà scoperto qualche giorno fa e mi appresto adesso a patchare.
$array["ciao"] = true;
rimane tale, mentre
$array["123"] = true;
diventa
$array[123] = true;
Che cazzata colossale!
Una cantonata che da PHP non mi aspettavo proprio.
E se non ho capito male, da manuale
$array["123.456"] = true;
diventa
$array[123] = true;
Che vergogna, che onta.


Ovvio, un indice deve essere un numero intero, non decimale di conseguenza è 
giusto cosi.
Php non è come delphi o un qualsiasi altro linguaggio fortemente tipizzato. 
Php converte automaticamente i valori da stringa a numerico e viceversa.
Se scrivi: "pippo" ottieni una stringa; se scrivi: "1pippo" ottieni una 
stringa, ma se scrivi "123" ottieni un numero non una stringa. se poi vuoi 
forzarlo come stringa puoi farlo senza problemi usando le funzioni apposite.
www.blueware.it
 

 stringa, ma se scrivi "123" ottieni un numero non una stringa. se poi
Ti sbagli. "123" è una stringa e rimane tale. Php converte al volo in 
caso di confronto o unione, non cambia il tipo della variabile. Tranne 
quando si tratta di chiavi di array. Prendendo una colossale cantonata.

"Useless Decoupage"  ha scritto nel messaggio 
news:yOBTo.16885$uT.7...@twister1.libero.it...

"123" è una stringa, cosi come 123 è un numero.... ma in un array, l'indice 
è sempre un numero e mai una stringa!!! quindi se scrivi $pippo ["123"] quel 
"123" è un numero e non una stringa.
Se poi scrivi: $pippo ["prrr"9] quel "prrr" che in apparenza è una stringa 
in realtà non lo è!
Poi se per te si tratta di un bug, fai tu, se ti vuoi divertire cosi, 
nessuno te lo impedisce, cmq buon anno.
www.blueware.it
 

 
PHP è tipizzato debolmente.
L'indice di un array deve esser un intero, e quindi quello che passi 
*viene* convertito in intero, implicitamente.
http://php.net/manual/en/language.types.type-juggling.php
http://www.php.net/manual/en/
language.types.string.php#language.types.string.conversion
Anche il C permette certe conversioni implicite (ma non come PHP e Perl).
Altri linguaggi sono più restrittivi.
Ciao  Manlio

 stringa in realtà non lo è!
Bensì?

 *viene* convertito in intero, implicitamente.
Questa tua frase come spiega l'esistenza di un array con 
contemporaneamente chiave "pippo" e con chiave "pluto"? Non certo con la 
conversione numerica di PHP dato che "pippo" e "pluto" vengono 
convertiti entrambi in 0. E' evidente che esiste un altro meccanismo. E 
dato che esiste un altro meccanismo, non c'è ragione per cui non 
dovessere essere applicato a "pippo" tanto quanto a "123". E' una 
cantonata. Forse un espediente per evitare l'esistenza di array sia con 
chiave "123" che con chiave 123 che avrebbe portato una novità nella 
gestione di PHP degli array che "casta" la chiave a seconda del suo 
contenuto invece che utilizzandola mantenendo tipo e valore.

 Questa tua frase[...]
Ma leggere la seconda riga sulla sintassi nel manuale è troppo impegnativo?
A key may be either an integer or a string. If a key is the standard 
representation of an integer, it will be interpreted as such (i.e. "8" 
will be interpreted as 8, while "08" will be interpreted as "08"). 
Floats in key are truncated to integer. The indexed and associative 
array types are the same type in PHP, which can both contain integer and 
string indices.
(
http://www.php.net/manual/en/language.types.array.php
)
Poi se non piace nessuno obbliga a usare PHP (che di cose discutibili ne 
ha di ben più serie...), giusto? ;-)

 *viene* convertito in intero, implicitamente.
Non mi risulta sia così: PHP permette array con indice intero o stringa 
(vedi link su altro mio post).
Il "problema" è che talvolta converte le stringhe e bisogna sapere 
secondo quali criteri (quelli indicati).

 Ma leggere la seconda riga sulla sintassi nel manuale è troppo impegnativo?
Ma farsi gli affari propri? Ho posto una domanda a Manlio Perillo sulla 
base di ciò che ha scritto lui. Aspetto una risposta, da lui. Il tuo 
copia-incolla non serve a niente.

 nessuno te lo impedisce, cmq buon anno.
Ricambio. Il buon anno, ovviamente! ;-)
Sui divertimenti dell'OP non mi pronuncio :-D
[1] 
http://www.php.net/manual/en/language.types.array.php

 Il tuo copia-incolla non serve a niente.
Se provassi a leggerlo ti servirebbe, visto che spiega esattamente 
quanto chiedevi nel tuo primo post.
Ma so che con te provare a ragionare non serve.

 quanto chiedevi nel tuo primo post.
Io non ho chiesto niente (controlla se vuoi). So come funziona. L'ho 
definita una cazzata.

 (vedi link su altro mio post).
Si, visto ora.
Ciao  Manlio


Se scrivi sul newsgroup ti rivolgi a tutti, la prossima volta che ti rivolgi 
a qualcuno in particolare, ti consiglio vivamente di usare la  email privata 
e se non l'hai te la fai dare :)
Per inciso, scrivendo sul newsgroup devi accettare che ti piaccia o no, ciò 
che gli altri ti scrivono; ti rammento che la tua risposta è poco educata.
Ho detto quanto dovevo.
www.blueware.it
 


Una cazzata definita male allora :)
www.blueware.it
 

 A key may be either an integer or a string[1].
Il php accetta che l'indice di un array possa  essere sia un intero che una 
stringa; ma per definizione l'indice di un array rimane sempre un intero.
Sempre per definizione, un array è un insieme di variabili caratterizzate 
dallo stesso nome e identificate da un indice.  Se hai un array di 5 
elementi, l'indice sarà: 0, 1, 2, 3, 4, e quindi puoi scorrere questi 
elementi con un ciclo for ad esempio... ma se hai un array sempre di cinque 
elementi con indice: pippo, caio, pluto, sempronio, rossi cosa fai? Certo 
puoi usare altre strutture che ti permettono di scorrere un array senza 
ricorrere agli indici... ma questo esula dalla definizione di array, è solo 
una comodità in più.
Esse si comportano pertanto come cinque variabili distinte.
www.blueware.it
 

 Esse si comportano pertanto come cinque variabili distinte.
Array associativi, questi sconosciuti :)
-- 
http://www.econet-project.eu


non sono sconosciuti :) sono solo una "novitï¿œ" del php; ma hanno una 
sintassi sensibilmente diversa
www.blueware.it
 

non sono sconosciuti :) sono solo una "novità" del php;
@lol;
Leonardo
-- 
Enough, enough!  But, stranger, ere we part,
Glancing farewell to each nefarious bier,
This warning would I beg you take to heart:
There is an end to e'en the worst career!

 esula dalla definizione di array, è solo una comodità in più.
Se implementi una lista (ordinata) ti basi sull'indice, se implementi 
una mappa (non ordinata) usi una corrispondenza chiave -> valore.
Ribadisco, sono due strutture dati diverse anche sul piano logico.
Questo se parliamo di informatica, secondo la definizione di qualsiasi 
testo in circolazione.
Tanto per rimanere terra-terra:
http://en.wikipedia.org/wiki/List_%28computing%29
http://en.wikipedia.org/wiki/Associative_array
http://en.wikipedia.org/wiki/Array_data_type
(vedi ad esempio implementazioni citate sui precedenti link)

 non sono sconosciuti :) sono solo una "novità" del php
Tanto nuovi che la prima implementazione ufficiale è del 1979, in pascal ;-)

 @lol;
Toglimi una curiosità: perché hai messo il '@'? :-)


Parliamo di array non di strutture dati dinamiche, non confondiamo quindi 
fagioli con lenticchie che pur essendo entrambi legumi sono due cose 
completamente diverse.
Giusto per ritornare all'epoca citata, mi spiace deluderti, ma il pascal 7 
(figuriamoci le versioni precedenti) non supportavano le strutture 
dinamiche; ai tempi le ci si gestiva usando i puntatori e di certo gli array 
non supportavano le stringhe come indici.
Mi spiace, ma ti sei sbagliato :)
www.blueware.it
 

 Mi spiace, ma ti sei sbagliato :)
Forse no: Lukham, Suzuki (1979), "Verification of array, record, and 
pointer operations in Pascal".
Era nel link citato sopra.




Se ti domandi perché @ e non %, è perché m'era rimasto in mente "array",
e poi non avrei saputo su cosa mappare i lol.
Se ti domandi perché "@lol" e non "lol", è perché gli array associativi,
o hash, che Marcello dà per "novità" del PHP, c'erano da circa vent'anni
e facevo riferimento a una delle più note - ma non la prima - delle loro
implementazioni, in Perl:
my %hash = (
        'pippo' => '1234567',
        'pluto' => '45678',
        'minni' => '123098-TOPOLINIA'
);
while( my ($key, $value) = each (%hash) )
{
        print "$key ($value)\n";
}
Gli hash con chiave stringa appaiono in Perl nel 1994. E, se la sintassi
degli hash Perl (v. sopra) suona "familiare" agli aficionados del PHP, è
perché Rasmus Lerdorf scrisse PHP/FI 1.0 nel 1995 proprio in Perl, e poi
le implementazioni successive, PHP/FI 2.0, PHP3, PHP4 e PHP5, mantennero
invariata la sintassi.


 e poi non avrei saputo su cosa mappare i lol.
$LOL
(lo prendo come stringa ;-) )

 Gli hash con chiave stringa appaiono in Perl nel 1994.
Leggevo or ora (su 
nist.gov
) che la prima implementazione built-in di 
"array associativo" risale al 1969, in SNOBOL4.
Praticamente miei coetanei: mi sento anch'io una novità ;-)