Variabile contenente array con valori dientici e con chiavi uguali

  • Creatore Discussione Creatore Discussione Monital
  • Data di inizio Data di inizio

Monital

Utente Attivo
15 Apr 2009
778
2
18
Arieccomi

ho questo problemino però ripetuto inq uelloc he sto facendo.

In pratica ho creato un form con delle select box all'interno di un ciclo for.

Ora nella apgina che riceve i dati devo verificare che nons iano stati inviati gli stessi valori ma forse perchè nonr iescoa concentrarmi abbastanza proprio non riesco a far delle verifiche

Questo il codice della select che invia i dati

PHP:
for($x=1;$x<5;$x++)
echo "<select name=\"ID[".$x."]\" class=\"select\" onclick=\"loadPage(this.form.elements[0])\">";
....blablabla
echo "<select name=\"Nome[".$x."]\" class=\"select\" onclick=\"loadPage(this.form.elements[0])\">";
.....blablabla

e questo quelli che li riceve

PHP:
$id= isset($_POST['ID']) ? $_POST['ID'] : array();
$nome= isset($_POST['Nome']) ? $_POST['Nome'] : array();

facendo un var dumpdi $id e di $nome mi stampa tutto correttamente però ora dovrei effettuare delle verifiche e qui mi blocco

spiego:

In $nome devo verificare che non siano stati inseriti 2 nomi ugauli
in ID devo verificare che non ci siano 2 numeri uguali

qual'è il comando giusto?

poi in ultima avendo definito le stesse chiavi per entrambe le variabili devo far diventare $id la chiave di $nomi in funzione della vecchia chiave $x non so se mi spiego

se faccio var_dump di $nomi avrò [1]=>Pippo [2]=>Topolino
mentredi $id avrò [1]=100 [2]=>200

ora $nomi mi deve diventare [100]Pippo e [200] topolino , questo mis ervirà epr poi inserire nel database i dati.
 
ciao
potresti porovare una cosa del genere
confronti il primo col secondo, terzo, quarto e quinto
il secondo col terzo, quarto, quinto
ecc...
PHP:
<?php
for($k=1; $k<5; $k++){
	for($j=($k+1); $j<=5; %j++){
		if($id[$k]==$id[$j] || $nome[$k]==$nome[$j]){
			//fai quello che devi fare se sono uguali
		}
	}
}
?>
 
ciao
potresti porovare una cosa del genere
confronti il primo col secondo, terzo, quarto e quinto
il secondo col terzo, quarto, quinto
ecc...
PHP:
<?php
for($k=1; $k<5; $k++){
	for($j=($k+1); $j<=5; %j++){
		if($id[$k]==$id[$j] || $nome[$k]==$nome[$j]){
			//fai quello che devi fare se sono uguali
		}
	}
}
?>


si ok cosi trova il valore uguale eprò mis ta facendo diventar matto l'esecuzione della condizione

io devo metter un avviso

PHP:
echo "hai messo l'd x volte"

e subito dopo una funzione javascript epr ritornare alla pagina principale.

ma mi ripete 5 volte la frase e non aprte il ritorno alla home :incazz2:
 
mi corrego

non funge.

l'avviso che isnerisco
PHP:
    if($id[$k]==$id[$j] || $nome[$k]==$nome[$j]){
            //fai quello che devi fare se sono uguali

echo "Sono uguali";
        }

pare anche se non ci sono valori ugali
 
ciao
scusa avevo messo u % al posto di $ (errore di battitura)
PHP:
<?php
$id=array(1=>33, 2=>44, 3=>55, 4=>66, 5=>77);
$nome=array(1=>"pinco", 2=>"pallo", 3=>"pinco", 4=>"pallino", 5=>"sofonisba");
for($k=1; $k<5; $k++){
    for($j=($k+1); $j<=5; $j++){
        if($id[$k]==$id[$j] || $nome[$k]==$nome[$j]){
            //fai quello che devi fare se sono uguali
			echo "hai messo due uguali $k e $j <br>";
        }
    }
}
?>
e questo è l'uotput
hai messo due uguali 1 e 3
 
l'avevo corretta quella borgo del % me ne ero accorto

però continua a farmi l'echo anche se non ci sono id uguali
 
ciao
è uno dei metodi che uso per fare i confronti.
comunque per verificare ho leggermente modificato
PHP:
<?php
$id=array(1=>33, 2=>44, 3=>55, 4=>66, 5=>55);
$nome=array(1=>"pinco", 2=>"pallo", 3=>"pinco", 4=>"pallino", 5=>"sofonisba");
for($k=1; $k<5; $k++){
    for($j=($k+1); $j<=5; $j++){
        if($id[$k]==$id[$j] || $nome[$k]==$nome[$j]){
            //fai quello che devi fare se sono uguali
			echo "hai messo due uguali $k e $j <br>";
			if($id[$k]==$id[$j]){ 
				echo "&nbsp;&nbsp;&nbsp;id valore ".$id[$k]." = ".$id[$j]."<br>";
        	}elseif($nome[$k]==$nome[$j]){
				echo "&nbsp;&nbsp;&nbsp;nome valore ".$nome[$k]." = ".$nome[$j]."<br>";
			}
		}
    }
}
?>
e questo è l'output
hai messo due uguali 1 e 3
nome valore pinco = pinco
hai messo due uguali 3 e 5
id valore 55 = 55
verifica cosa hai negli array e/o di aver messo i loro nomi giusti
 
ok funge avevo sbagliato io una cosa nel ciclo cmq funge, però c'è una solita cosa che ora mi sfugge

fatta la verifica se non trvoa id uguali deve fare altre verifiche e stampare un riepilogo.

senza questo codice los cript fa tutte le verifiche esattaemnte ed intabella correttamente ma se aggiungo l'elseif mi svombina utto a causa del ciclo for

PHP:
for($k=1; $k<5; $k++){
    for($j=($k+1); $j<=5; $j++){

            if($id[$k]==$id[$j]){ 
                echo "&nbsp;&nbsp;&nbsp;id valore ".$id[$k]." = ".$id[$j]."<br>";
            }
///qui devo inserire le altre veriche se non trova id uguali

///elseif(blablabla

        }
    }

come posso ovviare?


p.s per la seconda aprte del quesito(lo scambio di chiavi) non so come applicare la cosa

in pratica seguendo il tuo esempio

$id=array(1=>33, 2=>44, 3=>55, 4=>66, 5=>55);
$nome=array(1=>"pinco", 2=>"pallo", 3=>"pinco", 4=>"pallino", 5=>"sofonisba");

vorrei avere un array dove $id diventa la chiave di $nome in corrisponza delle chaivi /attuali)uguali

$nome=array(33=>"pinco", 44=>"pallo", 55=>"pinco", 66=>"pallino", 55=>"sofonisba");

thank
 
ciao
ho risistemato i due array come se avessero passato il controllo dei doppioni
PHP:
<?php
$id=array(1=>33, 2=>44, 3=>55, 4=>66, 5=>77);
$nome=array(1=>"pinco", 2=>"pallo", 3=>"asdrubale", 4=>"pallino", 5=>"sofonisba");

for($k=1; $k <= 5; $k++){
	$chiave=$id[$k];
	$nuovo_array[$chiave]=$nome[$k];
}
// TEST DI VERIFICA
foreach($nuovo_array as $ch => $val){
	echo "nuovo_array[$ch] contiene $val<br>";
}
?>

edit
credo, ma non ricordo, che ci sia una funzione php che fa quel lavoro, ma stamattina php.net (per me) non risulta raggiungibile (??), se la trovo te la posto
 
Ultima modifica:
ciao
da quello che ho capito se trova qualcosa di uguale rimandi al form perchè l'utente reinserisca, giusto?
se è così le altre verifiche devi metterele dopo i due for e non all'interno.
e un'osservazione
dallo script che hai postato vedo che controlli solo se l'id è duplicato.
cosa rappresenta quell'id, l'id dell'utente?
se è cosi a che ti serve che l'utente si attribuisca un id? quando (immagino) fai l'insert del nome in tabelle se l'id è autoincrement primarykey si aggiorna in automatico
 
ciao
da quello che ho capito se trova qualcosa di uguale rimandi al form perchè l'utente reinserisca, giusto?
se è così le altre verifiche devi metterele dopo i due for e non all'interno.
e un'osservazione
dallo script che hai postato vedo che controlli solo se l'id è duplicato.
cosa rappresenta quell'id, l'id dell'utente?
se è cosi a che ti serve che l'utente si attribuisca un id? quando (immagino) fai l'insert del nome in tabelle se l'id è autoincrement primarykey si aggiorna in automatico

si giusto se trova dei nomi uguali nel form rimanda all'index

le altre verifiche le ho messe dopo il for però quando reinvia al form
PHP:
			     echo "<script type=\"text/javascript\" >alert(\"Hai inserito ".$id." due volte\")
   history.back();
;</script>";

si vede la tabella vuota sullo sfondo e non mi paiceva sta cosa.

per il resto si controllo solo l'id perchè da l primo post che ho fatto ho modificato delle cose nel form princiaple e la variabile nome è un array fisso da cui devo fare un altro tipo di verifiche ed ho risolto con una funzione.
non ho detto neinte perchè los cript completo che hai postato mi servirà da un altra parte. in rpatica con questa discussione sto rpendendo due piccioni con una fava.

l'id nonè dell'utente ma del nome che seleziona e non è autoincrement per quello mi serviva la seconda aprte del quesito

la tabella da cui viene effettuata la selezione ha dei nomi e un id univoco per ogni nome. quando l'utente seleziona(da una select box) un nome mi porto dietro l'id

PHP:
echo "<select name=\"id[".$x."]\" class=\"select\" onclick=\"loadPage(this.form.elements[0])\">";
foreach($nomi as $chiave => $valore){
	
echo  "<option value=".$chiave.">$valore</option>";
}

quindi ho un array con gli id dei nomi poi ho un altro array (proveniente sempre da delle select box) che definisce le azioni su quel nome

e los cript per il cambio chiavi funge perfettamente anche se devo poi verificarne l'insert nella tabella mysql ma sono un pò indietro quindi a breve sarà facile che riposti :D

per la funzione forse riescoa farla cneh da solo in funzione di questo scripttino che haio messo

Attendo parere sul fatto del reindirizzamento
 
ciao
ecco ho trovato, al posto dei for piu semplicemente puoi fare
PHP:
<?php
$id=array(1=>33, 2=>44, 3=>55, 4=>66, 5=>77);
$nome=array(1=>"pinco", 2=>"pallo", 3=>"asdrubale", 4=>"pallino", 5=>"sofonisba");
$nuovo_array=array_combine($id,$nome);//per ver php >= 5
// TEST DI VERIFICA
foreach($nuovo_array as $ch => $val){
	echo "nuovo_array[$ch] contiene $val<br>";
}
?>
poi cosa intendi, una funzione che ti reindirizzi in automatico? se è così puoi usare
PHP:
echo "<meta http-equiv='Refresh' content='3; URL=nome_pagina_a_cui_riinviare.php'>";
//content ='3; sono i secondi di attesa prima di essere riinviati, pioi mettere da 0 in su
 

Discussioni simili