ciao a tutti,
devo ordinare un array numerico senza utilizzare le funzioni native.
Fin qui riesco, il problema è che non devo modificare gli indici.
Come posso risolvere?
grazie
ciao a tutti,
devo ordinare un array numerico senza utilizzare le funzioni native.
Fin qui riesco, il problema è che non devo modificare gli indici.
Come posso risolvere?
grazie
Se ho capito bene devi fare come la funzione asort(). Se è così, il codice è questo:
Codice PHP:
$sorted_array = array();
for($i=0; $i<count($array); $i++){
$min = $i;
for($j=$i+1; $j<count($array); $j++){
if($array[$j] < $array[$min])
$min = $j;
}
$sorted_array[$min] = $array[$min];
}
$array = $sorted_array;
Grazie. Cmq la soluzione mi restituisce i valori così come sono dichiarati
![]()
Non saprei neanche come modificare il tuo codice.
Questo è ciò che sono riuscito a fare io cambiando gli indici:
Codice PHP:
$arr=array(67,32,1,87,88,-3,123,565,-32,45,99,16,78,43,-638,33,61,90,0,12);
for($x = count($arr); $x >= 0; $x--) {
for($y = count($arr); $y >= 0; $y--) {
if($arr[$x] < $arr[$y]) {
$temp = $arr[$x];
$arr[$x] = $arr[$y];
$arr[$y] = $temp;
}
}
}
Grazie per la correzione. Mi spiego meglio, quello che devo fare è riordinare i valori mantendo la chiave originale. Quindi ottenere qualcosa del genere:
[7] => 565
[6] => 123
[10] => 99
[17] => 90
invece di:
[0]=> 565
[1]=> 123
[2]=> 99
[3]=> 90
Facciamo fina che l'array ha 6 valori:Originariamente inviato da raven74
non ha senso quello che dici
E' la chiave che da l'ordine. Se mantieni la chiave mantieni anche l'ordine iniziale.
prova a scrivere il risultato che vorresti ottenere per tutto l'array e non per solo 4 numeri.
Altrimenti ti servono 2 array: une che memorizza il valore e uno che memorizza la chiave originaria
$arr = array(6,26,68,4,8,35);
quello che devo ottenere (per quanto sia inutile e insensato, hai perfettamente ragione) è questo:
[2] => 68
[5] => 35
[1] => 26
[4] => 8
[0] => 6
[3] => 4
Non è nè inutile nè insensato, ma semplicemente impossibile per la definizione stessa di array!Originariamente inviato da dethklok
Facciamo fina che l'array ha 6 valori:
$arr = array(6,26,68,4,8,35);
quello che devo ottenere (per quanto sia inutile e insensato, hai perfettamente ragione) è questo:
[2] => 68
[5] => 35
[1] => 26
[4] => 8
[0] => 6
[3] => 4
"Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)
ma perchè i compiti per casa sul php non te li fai da solo? dire "devo ordinare un array senza usare le funzioni native" è uguale a dire "la professoressa mi ha detto di fare questo ma non mi va e spero che qualcuno mi dia la pappa pronta"
detto questo, ecco la pappa pronta
fonte: http://en.wikipedia.org/wiki/Bubble_sort
Codice PHP:
$mioarray = array(
0 => -20,
1 => 10,
2 => -10,
3 => 30,
4 => 20,
5 => 1,
6 => 12,
);
//risultato da ottenre:
/*
$mioarray = array(
0 => -20,
2 => -10,
5 => 1,
1 => 10,
6 => 12,
4 => 20,
3 => 30
);
*/
//ordinamento mantenendo le chiavi
function bubbleSort(&$A){
$n = count($A);
$appoggio = array();
foreach($A as $key => $value)
$appoggio[] = array($key,$value);
$isGreaterThen = function($a,$b){
return $a[1] > $b[1];
};
$swap = function($f,$t) use(&$appoggio){
$tmp = $appoggio[$t];
$appoggio[$t] = $appoggio[$f];
$appoggio[$f] = $tmp;
};
while($n>0){
$newn = 0;
for($i = 1; $i<$n; $i++){
if($isGreaterThen($appoggio[$i-1],$appoggio[$i])){
$swap($i-1,$i);
$newn = $i;
}
}
$n = $newn;
}
//ricostruisco
$A = array();
foreach($appoggio as $el)
$A[$el[0]] = $el[1];
}
bubbleSort($mioarray);
print_r($mioarray);
IP-PBX management: http://www.easypbx.it
Old account: 2126 messages
Oldest account: 3559 messages
Io volevo semplicemente un consiglio e non la pappa pronta e cmq devo dirti che, la tua pappa pronta non mi è servita assolutamente a nulla e si vede che non hai letto neanche i post ma ne hai approfittato subito per fare il sapientone di turno ed attaccare!!!!Originariamente inviato da Santino83_02
ma perchè i compiti per casa sul php non te li fai da solo? dire "devo ordinare un array senza usare le funzioni native" è uguale a dire "la professoressa mi ha detto di fare questo ma non mi va e spero che qualcuno mi dia la pappa pronta"
detto questo, ecco la pappa pronta
fonte: http://en.wikipedia.org/wiki/Bubble_sort
ho risolto creando una copia dell'array originale, come mi ha suggerito raven74, e con la funzione array_search
Codice PHP:
foreach($copia_array as $valori){
echo '['.array_search($valori,$arr)."]=>$valori";
}
Originariamente inviato da dethklok
ho risolto creando una copia dell'array originale, come mi ha suggerito raven74, e con la funzione array_search
Codice PHP:
foreach($copia_array as $valori){
echo '['.array_search($valori,$arr)."]=>$valori";
}
![]()
"Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)
ma perchè non vuoi usare le funzioni native? c'è http://php.net/manual/en/function.uasort.php che fà esattamente questo, perchè ti devi complicare la vita? vuoi studiare gli algoritmi d'ordinamento?
detto questo
io farò il sapientone, ma il mio sistema non modifica gli indici originali, come da esempio postato da te. Ma tanto, vuoi la pappa pronta e poi manco ti degni di provare quello che ti viene suggerito. Salutdevo ordinare un array numerico senza utilizzare le funzioni native.
Fin qui riesco, il problema è che non devo modificare gli indici.
IP-PBX management: http://www.easypbx.it
Old account: 2126 messages
Oldest account: 3559 messages