Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    Ordinare array numerico

    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

  2. #2
    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

  3. #3
    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;
          }
      }
      


  4. #4
    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

  5. #5
    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
    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

  6. #6
    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
    Non è nè inutile nè insensato, ma semplicemente impossibile per la definizione stessa di array!
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  7. #7
    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(
    => -20,
    => 10,
    => -10,
    => 30,
    => 20,
    => 1,
    => 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

  8. #8
    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
    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!!!!

    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";
        } 

  9. #9
    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)

  10. #10
    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

    devo ordinare un array numerico senza utilizzare le funzioni native.
    Fin qui riesco, il problema è che non devo modificare gli indici.
    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. Salut
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.