NePo
Rugpjūtis 23, 2007

Rikiuojam PHP masyvus

Tikiuosi skaitėte pažintį su PHP masyvais, dabar pratęsiu pasakojimą ir supažindinsiu jus su galimybėmis rikiuoti masyvus kalboje.

Pats paprasčiausias būdas rikiuoti masyvą yra funkcija sort()
Taigi susikurkime masyvą ir pabandykime jį surikiuoti

$result1=array(1,5,13,3345,6,3447,87,865,10);
sort($result1);
print_r($result1);

O rezultatai kaip ir reikėjo tikėtis yra:

Array ( [0] => 1 [1] => 5 [2] => 6 [3] => 10 [4] => 13 [5] => 87 [6] => 865 [7] => 3345 [8] => 3447 )

Jeigu norite surikiuoti masyvą atvirkščiai, galite pasinaudoti funkcija rsort() tuomet rezultatai bus:

Array ( [0] => 3447 [1] => 3345 [2] => 865 [3] => 87 [4] => 13 [5] => 10 [6] => 6 [7] => 5 [8] => 1 )

Dabar pereisime prie įdomesnės dalies, tam sukursiu kitą masyvą, kad jums būtų aiškiau, su žodinio tipo indeksais, o rikiavimui naudosiu asort() funkciją:

$result2=array( 'dd'=>'pirmas', 'ff'=>'antras', 'aa'=>"trecias", 'cc'=>'ketvirtas', 'bb'=>'penktas');
asort($result2);
print_r($result2);

Kodo rezultatas bus:

Array ( [ff] => antras [cc] => ketvirtas [bb] => penktas [dd] => pirmas [aa] => trecias )

Atkreipkite dėmesį į tai, kad masyvas surūšiuotas pagal reikšmes, tačiau rakto->reikšmės ryšys išlaikytas, priešingai nei sort() funkcijos atveju. Jeigu jums reikia išrūšiuoti masyvą priešinga tvarka, galite naudotis arsort(). Kitas rikiavimo būdas - naudoti ksort()

$result2=array( 'dd'=>'pirmas', 'ff'=>'antras', 'aa'=>"trecias", 'cc'=>'ketvirtas', 'bb'=>'penktas');
ksort($result2);
print_r($result2);

Kodo rezultatas bus:

Array ( [aa] => trecias [bb] => penktas [cc] => ketvirtas [dd] => pirmas [ff] => antras )

Kaip matote šį kartą surikiuota pagal raktus ir vėlgi ryšys raktas->reikšmė išsaugoti. Atvirkštiniam rikiavimui galite naudoti krsort()
Jeigu jūs nenorite rikiuoti masyvo, o tik jį apversti galite naudoti array_reverse() funkciją.

Ir pabaigoje noriu pademonstruoti natūralios tvarkos rikiavimo algoritmą.
Rikiavimui naudosim natsort() funkciją, ir kad jums būtų aiškiau rezultatus palyginsim su paprasta sort()

$result3=array("aa1","aa5","bb13","aa3345","bb6","bb3447","aa87","bb865","bb10");
print_r($result3);
echo "<br />";
sort($result3);
print_r($result3);
echo "<br />";
natsort($result3);
print_r($result3);

Kodo rezultatas bus:

Array ( [0] => aa1 [1] => aa3345 [2] => aa5 [3] => aa87 [4] => bb10 [5] => bb13 [6] => bb3447 [7] => bb6 [8] => bb865 )
Array ( [0] => aa1 [2] => aa5 [3] => aa87 [1] => aa3345 [7] => bb6 [4] => bb10 [5] => bb13 [8] => bb865 [6] => bb3447 )

Kaip matote šiuo atveju sort() funkcija viską laiko kaip tekstą ir pagal tai rikiuoja, tuo tarpu natsort() algoritmas iš pradžių išrikiuoja pagal abėcėlę, o po to pagal skaičių skaitinę vertę.

Tai ir viskas ką norėjau parodyti šį kartą, smagaus rikiavimo.

Nuorodos:
Natural Order Numerical Sorting

Panašūs straipsniai


“Rikiuojam PHP masyvus” komentarų: 2

  1. Infactor

    Būtų įdomu sužinoti kaip surūšiuoti masyvo žodžius su lietuviškomis raidėmis utf8 koduotėje.

  2. Darius

    Sveiki, norėjau paklausti, kaip padaryti kad įvedu sakinį ir man kiekvieno žodžio raides surūšiuotų didėjimo tvarka?

Rašyti komentarą

Jūs privalote prisijungti jeigu norite rašyti komentarą.