Visualizzazione dei risultati da 1 a 7 su 7

Discussione: bug natsort

  1. #1

    bug natsort

    Sto cercando di ordinare un array di numeri che iniziano con zero la funzione piu adatta dovrebbe essere natsort ma credo che abbia un bug e non funziona bene dato che mi da questo risultato

    Codice PHP:
    $a[0]=00001
    $a[1]=00008
    $a[2]=00005
    $a[3]=000011
    $a[4]=00003
    $a[5]=000014
    natsort($a); 
    print_r($a); 
    Questo e il risultato chiaramente sballato

    Array ( [1] => 0 [0] => 1 [4] => 3 [2] => 5 [3] => 9 [5] => 12 )

    Qualcuno mi puo dare una mano ad ovviare al problema?

  2. #2
    Ciao,
    il bug c'è, ma nel codice che hai scritto.
    Codice PHP:
    $a[0]=00001
    $a[1]=00008
    $a[2]=00005
    $a[3]=000011
    $a[4]=00003
    $a[5]=000014
    equivale a memorizzare:
    Codice PHP:
    $a[0]=1
    $a[1]=0
    $a[2]=5
    $a[3]=9
    $a[4]=3
    $a[5]=12
    perchè lo 0 (zero) iniziale indica al php che quel numero è in base 8.

    Se vuoi utilizzare numeri con una serie di zeri iniziali devi memorizzarli come stringhe.

    Alessandro
    Full Stack Developer presso Advice Lab
    Bonus Bitcoin
    Moon Bitcoin

  3. #3
    Si Alessandro grazie ho sbagliato a copiare incollare tra le prove che stavo facendo

    Codice PHP:
    $a[0]="00001";
    $a[1]="00008";
    $a[2]="00005";
    $a[3]="000011";
    $a[4]="00003";
    $a[5]="000014";
    natsort($a);
    print_r($a); 
    Array ( [0] => 00001 [3] => 000011 [5] => 000014 [4] => 00003 [2] => 00005 [1] => 00008 )

    Ecco l'esempio giusto, come vedi si comporta come un semplice asort come poter risolvere?

  4. #4
    L'ordinamento "naturale" non funziona con le cifre con zeri iniziali.
    Per risolvere puoi fare in modo che abbiano tutte la stessa unghezza aggiungendo zeri all'inizio delle stringhe più corte.
    Full Stack Developer presso Advice Lab
    Bonus Bitcoin
    Moon Bitcoin

  5. #5
    Risolto molto piu semplicemente usando usort come da manuale

    Codice PHP:
    function cmp($a$b)
    {
        if (
    $a == $b) {
            return 
    0;
        }
        return (
    $a $b) ? -1;
    }

    $a[0]="00001";
    $a[1]="00008";
    $a[2]="00005";
    $a[3]="000011";
    $a[4]="00003";
    $a[5]="000014";

    usort($a"cmp");

    foreach (
    $a as $key => $value) {
        echo 
    "$key$value\n";
    }

    e da il giusto risultato

    0
    00001 100003 200005 300008 4000011 5000014 

  6. #6
    Contando che hai perso le associazioni chiave=>valore (che presumevo volessi mantenere), tutta quella procedura equivale ad un semplice:
    Codice PHP:
    sort($a); 
    Full Stack Developer presso Advice Lab
    Bonus Bitcoin
    Moon Bitcoin

  7. #7
    Non mi ero accorto che in realta non funzionava neanche quello dato che stavo usando quell'array di prova, ma usando l'array ricavato dalla lettura della cartella non andava
    ho risolto usando

    ciclo per leggere la cartella
    $nome[]=$nomefile;
    fine ciclo
    sort($nome,SORT_NUMERIC);
    foreach ($nome as $key =>$valore)
    ecc...

    Ciao e grazie dell'aiuto

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 © 2026 vBulletin Solutions, Inc. All rights reserved.