Visualizzazione dei risultati da 1 a 9 su 9

Discussione: Ordinamento Array

  1. #1

    Ordinamento Array

    Ciao a tutti, mi sto esercitando con una semplice selection sort e fin qui tutto ok.
    Però il problema sorge quando devo stampare in output la sequenza del nuovo array ordinato con le chiavi del vecchio array.

    Mi spiego meglio, l'array da ordinare era questo
    $arr=array(8,4,16,12,28,11,59,101,57);

    è stato ordinato ma adesso, se voglio mandare in output il nuovo ordinato
    $arr=array(4,8,11,12,16,28,57,59,101) con le vecchie chiavi.

    [1]=>4
    [0]=>8
    [5]=>11
    etc..

    Non sò se mi sono spiegato bene ma grazie a chi mi aiuterà

  2. #2
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Non ho capito.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  3. #3
    Mi rispiego meglio se riesco.

    Devo ordinare un array di numeri interi e poi stamparlo con print_r facendo uscire in output i valori ordinati con a fianco le chiavi originali.

    l'output deve avere la seguente formattazione (i numeri sono messi a caso, era solo per farmi capire meglio (spero di esserci riuscito)

    [14] => -638
    [8] => -32
    [5] => -3"
    .
    .
    .
    .

  4. #4
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Se vuoi mantenere le vecchie chiavi prova asort.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  5. #5
    Ho provato così
    foreach ($arr as $chiave=>$valore)
    echo "</br>".asort($arr)."=>".$valore;

    ma il risultato non è quello che volevo o meglio, la vecchia chiave di 4 era 1 ma con la foreach asort non scorre i valori dell'array restituendo la vecchia chiave ?

    1=>4
    1=>8
    1=>11
    1=>16
    1=>16
    1=>28
    1=>57
    1=>59
    1=>101

  6. #6
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Codice PHP:

    <?php
        $arr
    =array(8,4,16,12,28,11,59,101,57);

        Print 
    "prima :
    "
    ;
        Foreach (
    $arr as $key => $value) {
            Print 
    "arr[$key] => $value 
    "
    ;
        }

        
    Asort($arr);

        Print 
    "dopo :
    "
    ;
        Foreach (
    $arr as $key => $value) {
            Print 
    "arr[$key] => $value 
    "
    ;
        }
    ?>


    codice:
    prima :
    arr[0] => 8 
    arr[1] => 4 
    arr[2] => 16 
    arr[3] => 12 
    arr[4] => 28 
    arr[5] => 11 
    arr[6] => 59 
    arr[7] => 101 
    arr[8] => 57 
    dopo :
    arr[1] => 4 
    arr[0] => 8 
    arr[5] => 11 
    arr[3] => 12 
    arr[2] => 16 
    arr[4] => 28 
    arr[8] => 57 
    arr[6] => 59 
    arr[7] => 101
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  7. #7
    grazie !!!!

  8. #8
    ultima domanda in merito al post. cosa c'è di sbagliato in questo algoritmo di ordinamento ?
    perchè qualcosa c'è ma non riesco a trovarlo...

    $arr=array(67,32,1,87,88,-3,123,565,-32,45,99,16,78,43,-638,33,61,90,0,12);
    for ($cont=0;$cont<(count($arr)-1);$cont++)
    {
    $minimo=$arr[$cont];
    for ($cont1=$cont+1;$cont1<count($arr);$cont1++)
    if ($arr[$cont1] < $minimo)
    {
    $arr[$cont]=$arr[$cont1];
    $appo=$minimo;
    $arr[$cont1]=$appo;
    }
    }

  9. #9
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Ho fatto un piccolo algoritmo di ordinamento (non è del tutto ottimizzato e non è mio scopo).

    Codice PHP:
    <?php

    $arr
    =array(67,32,1,87,88,-3,123,565,-32,45,99,16,78,43,-638,33,61,90,0,12);

    print 
    "Inizio:
    "
    ;
    print_r($arr);
    print 
    "
    "
    ;

    $Change   false;
    $Continue true;
    $Count    count($arr);
    $i 0;
    while (
    $Continue) {
        if (
    $i >= $Count-1) {
            
    $i 0;
            if (
    $Change == false) {
                
    $Continue false;
            }
            
    $Change false;
            
    //print "risultato :
    ";
            //print_r(
    $arr);
            //print "
    ";
            
        } 

            if (
    $arr[$i] > $arr[$i+1]) {
                
    $Temp      = $arr[$i];
                
    $arr[$i]   = $arr[$i+1];
                
    $arr[$i+1] = $Temp;
                
    $Change    = true;
            }
        
        
    $i++;
        
    }

    print "
    Fine:
    ";
    print_r(
    $arr);
    print "
    ";
    ?>

    codice:
    Inizio:
    Array ( [0] => 67 [1] => 32 [2] => 1 [3] => 87 [4] => 88 [5] => -3 [6] => 123 [7] => 565 [8] => -32 [9] => 45 [10] => 99 [11] => 16 [12] => 78 [13] => 43 [14] => -638 [15] => 33 [16] => 61 [17] => 90 [18] => 0 [19] => 12 ) 
    Fine:
    Array ( [0] => -638 [1] => -32 [2] => -3 [3] => 0 [4] => 1 [5] => 12 [6] => 16 [7] => 32 [8] => 33 [9] => 43 [10] => 45 [11] => 61 [12] => 67 [13] => 78 [14] => 87 [15] => 88 [16] => 90 [17] => 99 [18] => 123 [19] => 565 )
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

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.