Pravilno razvrščanje arraya

Pozdrav!

Spet jaz, tokrat z zelo banalnim problemom :)
Imam array podatkov:

Array
(
    [0] => 10. b
    [1] => 10.a
    [2] => 8. a
    [3] => 8. b
    [4] => 9. a
    [5] => 9. b
)

Kako bi lahko najboljše razvrstil ta array, da bi pokazalo: 10. a, 10.b, 9.a, 9.b...
Najbližje čemur sem se približal je tole:

Poizkusil sem z vsem živim: od sort(), do natsort(), asort(), ksort()..... in ne dobim želenega zaporedja. :(

15 odgovorov

Verjetno najlažje z uporabo usort in znotraj UDF primerjaš stringe s strnatcmp.

Aja, ti bi rad razvrščal po številki padajoče, znotraj številke pa posamezne črke naraščajoče?

Točno tako Vini! ;)

Quick and dirty solution: morda bi jih na začetku spravil v assoc. array.

9 => array( a)
10 => array ( b, a )
8 => array ( a, b )

Potem pa naprej sortiraj notranje
array_map('sort', $array)

Še po ključu
ksort($array)

In obrni
$koncni = array_reverse($array, TRUE);

SlimDeluxe, to bi bla ena rešitev da... Ampak probem je, da imena ne bodo vedno taka,.. enkrat recimo sploh ne bo številke, ali pa bo nekaj čist X,Y...

Uporabi uksort in spiši custom compare funkcijo.

1

Evo to bo to. Imaš še kakšen iziv?:)

<?php
    $arr = array("10.a","10a","6.b","6b","7.a","7a","10.b","9.a","6.a","10.c","6.c","10.a","7.b","7.a","7.a","aaaa","aaa","aa","ab","dd","cc","c","bb");

    print_r($arr);

    usort($arr, "cmp");

    print_r($arr);

    function cmp($a, $b)
    {
        $int_a = intval($a);
        $int_b = intval($b);

        if($int_a < $int_b)
        {
            return 1;
        }           
        if($int_a == $int_b)
            if(strcmp(str_replace($int_a.".", "", $a), str_replace($int_b.".", "", $b)) > 0)
                return 1;

        return -1;
    }
?>
3

zaay123:
SlimDeluxe, to bi bla ena rešitev da... Ampak probem je, da imena ne bodo vedno taka,.. enkrat recimo sploh ne bo številke, ali pa bo nekaj čist X,Y...

O čem točno se gre? Zakaj ne daš tem entitetam en sort atribut in omogočiš sortiranje v backendu?
V glavnem če nimaš končno-omejeno št. možnih zapisov vrednosti potem ne boš daleč prišel...

Gre se zato, da so to imena folderjev na FTP-ju, ki jih lahko admin tudi kreira.. in so lahko vse možno..

Iščem pa neko hitro rešitev ker se mudi, zdaj da grem delat nek order sistem mi bo vzelo preveč časa za implementirat. Ali pa tudi ne ? :)

In zapis je vedno oblike [1-9].[a-z] ali ne? Neko pravilo v imenih boš moral ugotoviti in glede na to sortirati.