Allora ho provato a creare una funzione di filtraggio separata... funziona, ma ho ancora dei dubbi , perchè secondo me c'è qualcosa che non va.. passo a spiegare
L'array punteggi è composto dalle quattro variabili contatore, diciamo countA, countB, countC, countD:
Codice PHP:
$punteggi = array($countA,$countB,$countC,$countD);
L'array dei profili è composto da quattro stringhe possibili:
Codice PHP:
$profili = array("profiloA","profiloB","profiloC","profiloD");
Essendoci dieci domande con quattro risposte ciascuna, se escludiamo i casi in cui ci sia uno solo dei contatori che come valore ha il massimo assoluto (la condizione del massimo assoluto l'ho realizzata con una if), le uniche possibilità in cui i contatori possono arrivare primi a parimerito (else) sono:
- quando due contatori hanno punteggio rispettivamente uguale a 4 ( e gli altri due sono entrambi ad 1, oppure uno a 2 e l'altro a 0 )
- quando due contatori hanno punteggio rispettivamente uguale a 3 ( e gli altri sono entrambi a 2)
- quando tre contatori hanno punteggio rispettivamente uguale a 3 ( e il quarto è a 1 )
Per cui ho inserito quanto segue nel corpo dell' else:
Codice PHP:
// se c'è un vincitore assoluto imposta vince come il massimo del vettore punteggi
..... questa parte funziona bene ......
//altrimenti estrae a sorte tra i primi a parimerito
else{
function maggiore($valore){
if($valore>2){ return TRUE; }
else{ return FALSE; }
}
$maggiori = array_filter($punteggi,"maggiore");
$random = array_rand($maggiori, 1);
$vince= $punteggi[$random];
}
for($i=0; $i<4; $i++)
if($vince == $punteggi[$i]){
$profilo = $profili[$i]; //qui si verifica il problema, nel caso di estrazione random
}
Per controllare che tutto funzionasse bene davvero ho usato delle print_r per verificare gli indici e i valori estratti dalle varie funzioni applicate agli array.
Il punto è che se per esempio.. risultano maggiori a parimerito con 4 punti countB (cioè punteggi[1] ) e countC ( cioè punteggi[2] ), applicando il filtro mi ritorna un array che effettivamente contiene:
Array( [1] => 4 count[2] => 4 )
Fin qui credo sia tutto regolare.
Poi... la funzione array_rand se non ho capito male mi restituisce l'INDICE di un elemento estratto a sorte dall'array, giusto? mi ritorna correttamente o 1 o 2 ( l'ho verificato con una print_r($random); ). Nel caso corrente mi ha ritornato:
1
Quindi assegno a $vince il valore, ed esce correttamente il valore relativo, 4
Il problema si verifica nel momento in cui dico $profilo = $profili[$i]; perchè se verifico la cosa con un print_r($profilo) , mi escono SIA profiloB che profiloC .. =/
( non so se sono stato chiaro chiedo scusa sono alle prime armi )