- Home
- Categorie
- Coding e Sistemistica
- PHP
- Strano Errore Array
-
Strano Errore Array
Ciao a tutti ho problemi con questo pezzettino di codice che serve a restituirmi delle foto a seconde se in quell' array è presente il nome della città:
[php]
$nome = array ();
for ($cont=0; $cont <= $lungh_all; $cont++) {
array_push($nome, $$all[$cont]);
}for ($cont=0; $cont <= $lungh_all; $cont++) {
if (in_array($nomecitta, $nome[$cont])) {
echo '<div><a href="'.$urlsito.''.$all[$cont].'"><img src="'.$urlsito.''.$all[$cont].'/0.jpg" alt=""></a>'.$all[$cont].'</div>';
}
}
[/php]In questo modo funziona ma mi restituisce anche questo errore:
Wrong datatype for second argument
In pratica non ho dichiarato $nome[$cont] come arrayMa se aggiungo $nome[$cont] = array (); all' interno del ciclo (fuori non ha effetto) l' errore sparisce, ma anche il risultato!
Dove sbaglio?
-
Ciao Ivan88,
l'errore viene generato poichè non passi un array, ma un altro tipo di variabile.
-
Ciao Dark,
grazie della risposta....come lo risolvo???
-
Non ho idea di cosa tu stia cercando di fare onestamente.
-
Ok provo a rispiegarmi
Io ho tanti array di nomi ad esempio $Giulio che contiene delle città
L' array $all contiene questi nomi, e la prima parte del codice inserisce una $davanti a ogni nome nell' array $nome
Adesso in $nome ci sono tanti array tipo $Giulio
if (in_array($nomecitta, $nome[$cont])) {
Con questa riga, per ogni array in $nome dovrei scoprire se la città è p resente e visualizzarli a video.
Tutto questo funziona ma mi dà quell' errore.
Spero di essere stato chiaro, grazie...
-
Nessuna idea?
Come faccio a fare in modo di cercare una elemento in tutti gli array che ho?
C'è un modo per farlo?
Ho notato che l' errore rimane anche saltando la prima parte di codice e mettendo una $ davanti all' elemento dell' array $all[$cont]:
[php]
for ($cont=0; $cont <= $lungh_all; $cont++) {
if (in_array($nomecitta, $$all[$cont])) {
echo '<div><a href="'.$urlsito.''.$all[$cont].'"><img src="'.$urlsito.''.$all[$cont].'/0.jpg" alt=""></a>'.$all[$cont].'</div>';
}
}
[/php]
Grazie a tutti per l' aiuto
Ciao
-
Non ho ben capito il funzionamento, ma mi "puzza" quell'array passato come $$all["cont"] e credo di aver trovato come aiutarti: cercando sulla documentazione ufficiale di php, ho trovato questo:
In order to use variable variables with arrays, you have to resolve an ambiguity problem. That is, if you write $$a[1] then the parser needs to know if you meant to use $a[1] as a variable, or if you wanted $$a as the variable and then the [1] index from that variable. The syntax for resolving this ambiguity is: ${$a[1]} for the first case and ${$a}[1] for the second.
riferimento: php.net/manual/en/language.variables.variable.php
-
Grazie Mille Endorama, il tuo aiuto mi ha fatto sperare... ma il proiblema rimane tale e quale...
-
Per precisione ho cambiato il codice con:
[php]for ($cont=0; $cont <= $lungh_all; $cont++) {
if (in_array($nomecitta, ${$all[$cont]})) {
echo '<div><a href="'.$urlsito.''.$all[$cont].'"><img src="'.$urlsito.''.$all[$cont].'/0.jpg" alt=""></a>'.$all[$cont].'</div>';
}
}[/php]e l' errore è
Warning: in_array() [function.in-array]: Wrong datatype for second argumentP.S. E' significativo ce l' errore compaia 14 volte prima dei riusltati, indipendentemente dal loro numero?
L' errore come ho detto scompare ponendo
[php]${$all[$cont]} = array ();[/php]Ma questo fa scomparire ogni risultato...
-
P.S. E' significativo ce l' errore compaia 14 volte prima dei riusltati, indipendentemente dal loro numero?
Da quello che dici sembra che l'errore arrivi decisamente da lontano.1: hai provato con l'altro metodo segnalato nella documentazione di php? Non ho idea se possa funzionare, ma ormai proverei!
2: puoi postare tutto il codice dall'inizio alla fine?
Postalo su pastebin.com/ , perchè se è lungo e lo posti qui nel forum si fa una faticaccia a capirci qualcosa!Grazie
-
Con l' altro metodo vuoi dire quello delle funzioni?
Comunque ho postato il codice qui http://pastebin.com/KzV3tun3
Ho ridotto gli elementi negli array per far spazio, ma il resto comprende tutti gli elementi.
Grazie Mille
Ivan
-
Credo di aver risolto:
se metti questo codice
[php]if ( in_array($nomecitta, $all2) ) {[/php]il tutto funziona.
Il tuo codice attualmente è questo:
[php]if (in_array($nomecitta, ${$all2[$cont]})) {[/php]In pratica tu stai facendo l'accesso alla variabile con il nome uguale a $all2[$cont], ed è li l'errore. Non devi usare [$cont] se vuoi passare tutto l'array! In pratica tu stai passando ad in_array() non un array, bensi uno dei valori di cui è composto l'array. Quindi togliendo l'indice ( [$cont] ) il tutto si risolve.
L'ho provato e funziona, non ci sono più errori, vedi tu se fa quello che avevi previsto.
-
No non ci siamo.
Il codice deve cercare $città in ogni array col nome (es cerca Terni in $Giulio)
Quindi
[php]${$all2[$cont]}[/php]non è altro che
[php]$Giulio[/php]con $all2 che contiene i vari nomiHo comunque provato come mi suggerisci tu con $$all e $all
Nel primo caso mi continua a dare errore, nel secondo non da errore ma ovviamente non funziona (sta cercando la città in Giulio non in $Giulio)
-
Allora... Scusa se ho confuso il tuo problema, nel delirio di capire come risolverlo non l'ho inquadrato bene!
Dopodichè :?, credo stavolta di avercela fatta sul serio! ( Spero.... )
Cerco di andare per punti, spiegarlo è piuttosto difficile!
- Come giustamente mi hai ricordato, tu devi fare l'accesso a $Giulio. Ma se $Giulio non è mai stata inizializzata, che valore ti restituisce PHP? NULL, che non è un array!
Nel tuo codice infatti facevi riferimento, nell'array $all ad "Antonio" e "Daxo", ma le relative variabili $Antonio e $Daxo non esistevano!!!
[php]$all = array (
"Antonio" => "Napoli" ,
"Daxo" => "Salerno" ,
); // ps: qua ti eri dimenticato il ; ( oppure è un errore di copia / incolla?? )[/php] - Inizializzando quelle variabili ad array ( il valore l'ho dato a caso ), il tutto sembra già prendere senso!
[php]$Antonio = array("Napoli");
$Daxo = array("Salerno");[/php] - Ti rimane ancora un errore... questo perchè nella riga del ciclo for
[php]for ($cont=0; $cont <= $lungh_all; $cont++) {[/php]quel $cont <= $lungh_all fa si che tu esegua il ciclo fino ad un elemento oltre la fine dell'array $all. Questo perchè count() conta quanti elementi ci sono in un array, ma partendo da 1, non da 0, come sono indicizzati gli array!
Quindi basta mettere
[php]for ($cont=0; $cont < $lungh_all; $cont++) {[/php] ( occhio a quel $cont < $lungh_all ) - Per accedere al valore che ti serve con la funzione in_array() devi mettere
[php]${$all2[$cont]}[/php] ( che era già giusto, il problema di fatto stava tutto nelle inizializzazioni di variabili ).
Quindi l'if diventa
[php]if (in_array($nomecitta, ${$all2[$cont]})) {[/php] - A questo punto aggiornando la pagina dovrebbe essere tutto bianco, senza errori.
- Se a questo punto provi ad inserire in $all anche $Troy, $Valentino, e le altre variabili, e cambi il valore di $nomecitta con uno dei valori inseriti nei rispettivi array, dovresti vedere finalmente i tuoi risultati!!! ( Io ho fatto la prova in locale e funziona... )
Per comodità ho postato il codice anche su PasteBin, pastebin.com/5UJAj9EC
Se hai ancora bisogno chiedi pure, ma spero proprio di avercela fatta
- Come giustamente mi hai ricordato, tu devi fare l'accesso a $Giulio. Ma se $Giulio non è mai stata inizializzata, che valore ti restituisce PHP? NULL, che non è un array!
-
GRAZIE!!!
In realta quegli array c' erano già, li avevo eliminati nel copiarli su pastebin.
Comunque tu mi hai messo la pulce nell' orecchio e ho provato cancellando tutto e riscrivendo solo pochi valori per provare.
Il codice funziona perfettamente, il problema è che su 300 e passa array probabilmente ne ho copiato male qualcuno.
Grazie Mille Ancora
Ivan
-
Figurati!!
Buon lavoro
-
Un' ultima cosa
Per non stare a scrivere tutte le citta nel caso sia in tutte le regioni ho fatto così:
[php]$Umbriaprov = array (
"Perugia" ,
"Terni" ,
);
$Umbrialungh= count($Umbriaprov);$Julian4 = $Umbriaprov;[/php]
Ma non funziona... dove sbaglio?
-
Cosa significa che non funziona?
Ti ritorna errori oppure non fa semplicemente quello che vuoi?Così ad una rapida occhiata sembrerebbe corretto, almeno dal punto di vista sintattico...
-
Li conta come errori e mi da la reazione di prima:
Warning: in_array() [function.in-array]: Wrong datatype for second argument on line 12
-
Ora non sono sul mio pc, quindi non posso fare le prove necessarie, ma hai provato a passargli la variabile per referenza ( la butto li, non ho idea se funzioni )?
[php]$Julian4 = &$Umbriaprov; [/php]