Newsgroup: it.comp.www.php
Titolo: Ordinare array bidimensionale, help!

Salve a tutti, ho un disperato bisogno di aiuto:
ho un array di questo tipo ricavato da una query:
$ARRAY[$n]["nomecampo"]
dove nomecampo sono quattro campi, $n č il numero del record.
Dopo aver fatto alcune operazioni su questo array ed aver tolto degli
elementi dovrei ordinarlo in modo diverso.
Il primo $ARRAY contiene infatti il risultato di questa query
SELECT campo1, campo2, campo3, campo4 FROM tabella WHERE condizione ORDER BY
campo4, campo3
fatte le operazioni dovrei riordinarlo come se la query di prima fosse
SELECT campo1, campo2, campo3, campo4 FROM tabella WHERE condizione ORDER BY
campo2, campo3, campo4
Contando che ho appunto fatto delle operazioni sul primo non posso rifare la
query in MySql, e non posso salvarla prima di aver fatto le altre
operazioni.
Sul manuale ho trovato la funzione array_multisort, ma non mi sembra che
assolva al mio scopo..
Potete aiutarmi??
LAMASE

"LAMASE" <a@b.c> wrote in message
news:acvj86$rmv$1...@fe1.cs.interbusiness.it...

non ho mai provato, IMHO dovresti fare cosi:
// prendere $ARRAY[$n] e mettere in quattro array distinti
for ($i=0; $i < count($ARRAY); $i++) {
    $ar1[$i]=$ARRAY[$n]['campo1'];
    $ar2[$i]=$ARRAY[$n]['campo2'];
    $ar3[$i]=$ARRAY[$n]['campo3'];
    $ar4[$i]=$ARRAY[$n]['campo4'];
}
// fare il array_multisort passando tutti e' quattro array
array_multisort (
 $ar2, SORT_ASC, SORT_STRING,
 $ar3, SORT_ASC, SORT_STRING,
 $ar4, SORT_ASC, SORT_STRING,
 $ar1, SORT_ASC, SORT_STRING);
// Rimettere insieme l'array:
for ($i=0; $i < count($ARRAY); $i++) {
    $ARRAY[$n]['campo1'] = $ar1[$i];
    $ARRAY[$n]['campo2'] = $ar2[$i];
    $ARRAY[$n]['campo3'] = $ar3[$i];
    $ARRAY[$n]['campo4'] = $ar4[$i];
}
Farci sapere se va...
Saluti
Jurgen

 Farci sapere se va...
Speravo in qualcosa di "predefinito", altrimenti mi sarei inventato un
metodo senza disturbarvi... =)
C'č un problema: array_multisort() mantiene l'indice degli elementi, per cui
riunendo il risultato con
for ($i=0; $i < count($ARRAY); $i++) {
    $ARRAY[$n]['campo1'] = $ar1[$i];
    $ARRAY[$n]['campo2'] = $ar2[$i];
    $ARRAY[$n]['campo3'] = $ar3[$i];
    $ARRAY[$n]['campo4'] = $ar4[$i];
}
riottengo lo stesso risultato di prima!
(e siccome non uso mai each, list, reset, next eccetera non so come
fare............. un aiutino?)
LAMASE

 }
Era sbagliato il mio loop (era da prendere come una traccia, ma vedo che ho
sbagliato).
per salvare gli indici li assegni magari ad un quinto array:
    $ar5[$i]=$i; ed usi quello per rimettere a posto l'array.
Cmq. una soluzione diversa potrebbe essere di buttare i dati in una altra
tabella e fare la query finale che necessiti da quella tabella?

 tabella e fare la query finale che necessiti da quella tabella?
E privarmi del piacere di fare a mano l'ordinamento "a bolle" per questo
array?? =))
LAMASE

 array?? =))
ma nooo!!! con tutti i bei algoritmi di sorting che ci sono!!
beccati questa:
http://www.cs.ubc.ca/spider/harrison/Java/sorting-demo.html
ciao!
-- 
Punkarruso
mail:punkarruso(at)geniotradottoininglese(dot)it
pubblicità progresso:
http://www.gnu.org/philosophy/why-free.it.html

"LAMASE" <a@b.c> wrote in message
news:ad03dl$gqo$1...@fe1.cs.interbusiness.it...

Se lo vuoi fare veramente a mano:
- fai un dump del database,
- ordina con un editor di testo
- e poi lo dai in pasto al database...
;-)

 - e poi lo dai in pasto al database...
A mano nel senso di fare da capo l'ordinamento con due for annidati e un po'
di controlli =)
LAMASE

"LAMASE" <a@b.c> wrote in message
news:ad0ab0$nrg$1...@fe2.cs.interbusiness.it...

Puoi sempre fare un ordinamento con usort.
Sempre meglio che mettersi a scrivere un bubblesort...