Newsgroup: it.comp.www.php
Titolo: Array delirium

Ciao a tutti!
mi sono impappinato su una questione di array, vediamo di
descrivere chiaramente il problema:
in una pagina php, un ciclo while costruito su due query
mysql crea un array associativo.
Il problema e' che devo ordinare questo array prima di
stamparlo in html; concluso il ciclo,l'array e' creato
correttamente, ma come faccio ad ordinarlo secondo uno
degli indici e ad estrapolarne i dati?
Inoltre l'unico manuale ora a mia disposizione (in inglese)
e' abbastanza pessimo, direi, e assai poco chiaro nello
spiegare il funzionamento di list(), each() etc.
Anche il manuale online non mi e' di molto aiuto.
L'array ottenuto e' formato da 5 colonne e un numero di
righe che possono essere variabili.
Chi mi aiuta cortesemente a sbloccarmi?
Grazie per l'attenzione e buona pausa pranzo a chi la fa :)
Ciao,
Orzouei

 ha scritto nel messaggio
news:3BB9C898...@libero.it...


 degli indici e ad estrapolarne i dati?
se i dati li ordini mentre fai la query? (Es: SELECT name, surname, age FROM
persone WHERE age > 21 ORDER BY name ASC)
LAMASE

 'concreto' del  problema ;)
Ok, faccio subito:
E' un po' macchinoso (sono alle prime armi), inoltre tieni presente
che girera' su un server con php3, che per ora non verra' upgradato.
$qper="select idperito, nome, cognome from periti";
$rper=mysql_query($qper, $mysql_link);
if(mysql_num_rows($rper)<1)
	{echo "Warning: possible inconsistent data\n";}
 
while($arrayper=mysql_fetch_array($rper))
    {
    $idperito=$arrayper["idperito"];
    $nome=$arrayper["nome"];
    $cognome=$arrayper["cognome"];
    $nomeperito="$nome $cognome";
 
    $qvoto="select avg(voto) as media, count(voto) as tot from voti where idperito='".$idperito."' and month(dataper)='".$nummese."'";
    $rvoto=mysql_query($qvoto, $mysql_link);
    if(mysql_num_rows($rvoto)<1)
	{echo "Warning:  possible inconsistent data\n";}
 
    $arrayvoto=(mysql_fetch_array($rvoto));
 
    // estrapolo i dati che mi servono:    
    $votomedio=$arrayvoto["media"];
    $totpratiche=$arrayvoto["tot"];
    $fattore=bonus($votomedio);
    if($debug==1)   {echo "<BR> Fattore = ".$fattore.".\n";}
    $bonuspoint=$fattore*$totpratiche;
    $globalpoint=$votomedio+$bonuspoint;
 
     // ora creo l'array (che andra' ordinato in base a global).
    $risultati["perito"] = "$nomeperito";
    $risultati["tot"] = "$totpratiche";
    $risultati["media"] = "$votomedio";
    $risultati["bonus"] = "$bonuspoint";
    $risultati["global"] = "$globalpoint";
questo e' tutto: qui dovrei ora fare un ciclo che mi "sputi" in html
una riga di una tabella (ordinata in base al campo "global") per quante
sono le righe dell'array, ma non so come andare avanti.
Accetto suggerimenti ;)
Ciao,
Orzouei

 persone WHERE age > 21 ORDER BY name ASC)
Non posso, perche' il valore in base al quale voglio ordinare l'array
non fa parte del db, ma viene calcolato in php.
Cmq ora ho risolto, grazie.
Ciao!
Orzouei

    $risultati[$count]["perito"] = "$nomeperito";
Comunque ora ho risolto: dopo aver creato l'array,
for($i=1; $i<=$count; $i++)
         {$globali[$i]=$risultati[$i]["global"];}
     arsort($globali);
     while(list($k, $v)=each($globali))
         {
         $perito=$risultati[$k]["perito"];
         $tot=$risultati[$k]["tot"];
         $media=$risultati[$k]["media"];
         $bonus=$risultati[$k]["bonus"];
         $global=$risultati[$k]["global"];
         ?>
         <tr>
             <td>&nbsp;<?echo $perito;?></td>
             <td>&nbsp;<?echo $tot;?></td>
             <td>&nbsp;<?echo $media;?></td>
             <td>&nbsp;<?echo $bonus;?></td>
             <td>&nbsp;<?echo $global;?></td>
         </tr><?
         }
?>
</table>
(la tabella viene aperta e intestata prima del while :)
Grazie per l'attenzione e buona serata a tutti!
Orzouei