- Home
- Categorie
- Coding e Sistemistica
- PHP
- Strano Errore Array
-
Così la prende! Non conoscevo la referenza, non sono molto esperto di php
Magari riesci a risolvermi anche questo doppio ciclo:
[php]for ($cont=0; $cont < $lungh_all; $cont++) {
while ($conta < $lunghprov) {
if (in_array($prov[$conta], ${$all2[$cont]})) {
echo '<div><a href="'.$urlsito.''.$all2[$cont].'"><img src="'.$urlsito.''.$all2[$cont].'/0.jpg" alt=""></a>'.$all2[$cont].'</div>';
}
}
}[/php]Serve alla pagina delle regioni, prov contiene le varie province in array.
Non mi da errore ma viene fuori vuoto
Grazie
-
Ciao Ivan88,
Invece che utilizzare tutte queste variabili per conteggiare gli elementi degli array, potresti utilizzare la funzione foreach, che ti permette di esaminare gli array riga per riga con un costrutto molto semplice.
Ho sistemato i tuoi post inserendo il tag php dove mancava... Il tag php è utilissimo quando si posta del codice (specialmente in questa sezione), poiché evidenzia la sintassi con i colori e permette una lettura più semplice a chi interviene per aiutarti. Qui trovi informazioni su come utilizzarlo, mi raccomando fanne buon uso!
Ah, nell'if prova a sostituire
[php]${$all2[$cont]}[/php]
con
[php]$all2[$cont][/php]
-
Puoi postare un pezzo di codice più lungo? Altrimenti è difficile venirne a capo....
Per esempio, la variabile $conta dove viene inizializzata? Viene incrementata? Deve esserlo?
$lungprov immagino sia il risultato di count($prov), ma senza vedere il tuo codice non posso esserne sicuro...
-
Sì certo
[PHP]
${$nomereg} = array ();
$reg=${$nomereg};
$prov1=''.$nomereg.'prov';
$prov=$$prov1;
$lungprov= count($prov);for ($cont=0; $cont < $lungh_all; $cont++) {
while ($conta < $lunghprov) {
if (in_array($prov[$conta], ${$all[$cont]})) {
echo '<div><a href="'.$urlsito.''.$all[$cont].'"><img src="'.$urlsito.''.$all2[$cont].'/0.jpg" alt=""></a>'.$all2[$cont].'</div>';
}
}
}
[/PHP]Come si inizializza devo scrivere tipo $conta="1"; ?
-
Grazie anche a te Luca per i consigli.
Il foreach potrebbe facilitarmi la vita ma nel mio caso non penso di poterlo usare.
Come posso ad esempio cambiare questa riga?
[PHP]for ($contat=0; $contat < $lungprov; $contat++) {
echo '<div><a href="'.$urlsito.'citta/escort_'.$prov[$contat].'.php">'.$prov[$contat].'</a></div>';
}[/PHP]
-
Andiamo per ordine:
$conta lo puoi inizializzare a 0 ( devi scorrere una array, il cui indice parte da 0 )
[php]$conta = 0; // non mettere "0" perchè inizializzi una stringa![/php]Così forse stampa qualcosa... Se i miei ricordi sono giusti, se PHP trova una variabile non inizializzata la inizializza con NULL, che poi viene interpretato come 0, stringa vuota, false e tutti i valori "nulli"...Per vedere se è così abilita gli errori di tipio E_NOTICE, che ti segnalano quando una variabile non è inizializzata ( qui un bell'articolo php.html.it/guide/lezione/2642/le-variabili/ verso metà pagina trovi un esempio di variabili non inizializzate ).
Per il foreach ( php.net/manual/en/control-structures.foreach.php ), verrebbe così:
[php]
foreach ( $prov as $p ) {
echo '<div><a href="'.$urlsito.'citta/escort_'.$p.'.php">'.$p.'</a></div>';}
[/php]invece di
[php]
for ($contat=0; $contat < $lungprov; $contat++) {
echo '<div><a href="'.$urlsito.'citta/escort_'.$prov[$contat].'.php">'.$prov[$contat].'</a></div>';
} [/php]Ossia per tradurre in linguaggio:Per ogni $p elemento di $prov { esegui codice }
-
Ok corretto,
anche inizializzando la variabile non stampa comunque nulla.Il foreach funziona
-
Sostituendo il while col foreach funziona perfettamente
[PHP]for ($cont=0; $cont < $lungh_all; $cont++) {
foreach ($prov as $p) {
if (in_array($p, ${$all[$cont]})) {
echo '<div><a href="'.$urlsito.''.$all[$cont].'"><img src="'.$urlsito.''.$all[$cont].'/0.jpg" alt=""></a>'.$all[$cont].'</div>';
}
}
}[/PHP]
-
Ciao a tutti,
scusate ma si è ripresentato un proplema simile:Warning: array_rand() [function.array-rand]: Second argument has to be between 1 and the number of elements in the array
Warning: Invalid argument supplied for foreach() in
Per questo codice:
[php]foreach ($all as $m) {
foreach ($prov as $p) {
if (in_array($p, $$m)) {
array_push($reg,$m);
}
}
}
$reg2= array_unique($reg);
$lungh_reg2= count ($reg2);
echo $lungh_reg2;$chiave3 = array_rand ($reg2, $lungh_reg2);
foreach ($chiave3 as $m) {
$fin = $reg2[$m];
echo '<div><a href="'.$urlsito.''.$fin.'"><img src="'.$urlsito.''.$fin.'/0.jpg" alt=""></a>'.$fin.'</div>';
}[/php]La cosa importante è che il codice di per se funziona perfettamente e che il problema si presenta solo quando l' elemento da inserire in $reg *è uno solo!!! *
Infatti al codice ho aggiunto echo $lungh_reg2; che di per se non serve, per vedere la lunghezza, ed esce 0!
Mentre se gli elementi sono più di uno il numero è corretto. Come mai??Non ne vengo proprio a capo...
Grazie Mille
Ivan
-
Errore Stupidissimo
Il problema non è il codice precedente ma semplicemente il fatto che l' array_rand non funziona con lunghezze minori di 2.
Ho risolto il problema con un semplice ifelse
Per completezza posto il codice finale corretto:[PHP]foreach ($all as $m) {
foreach ($prov as $p) {
if (in_array($p, $$m)) {
array_push($reg,$m);
}
}
}
$reg2= array_unique($reg);
$lungh_reg2= count ($reg2);if ($lungh_reg2>1) {
$chiave3 = array_rand ($reg2, $lungh_reg2);foreach ($chiave3 as $m) {
$fin = $reg2[$m];
echo '<div><a href="'.$urlsito.''.$fin.'"><img src="'.$urlsito.''.$fin.'/0.jpg" alt=""></a>'.$fin.'</div>';
}
}
else if ($lungh_reg2==1){
echo '<div><a href="'.$urlsito.''.$reg2[0].'"><img src="'.$urlsito.''.$reg2[0].'/0.jpg" alt=""></a>'.$reg2[0].'</div>';
}[/PHP]