Advertisement
  1. Code
  2. PHP

Paano Mag-Sort ng Arrays sa PHP

Scroll to top
Read Time: 14 min

() translation by (you can also view the original English article)

Madalas ay mas madaling kumuha ng partikular na bahagi ng impormasyon mula sa naka sort na data, kung hindi ay kailangan mong isa-isahin ang bawat element ng paisa-isa. Halimbawa, sabihin na natin mayroon kang nakatagong marka ng iba’t ibang estudyante sa isang klase sa array o table. Kapag ang data ay hindi naka sort sa pamamagitan ng mga markang nakuha, kailangang mong tingnan ang marka ng bawat estudyante sa klase bago mo masabi kung sino ang nakakuha ng pinakamataas at pinakamababang marka. Kung ang table ay nakaayos na sa mababa pataas batay sa marka, sa simpleng pagtingin sa marka ng unang estudyante masasabi mo na ang pinakamababang marka.

Ang pagso-sort ay nagagawang napakadali at napakabilis ng maraming gawain na kinakailangan ng paga-access o pagkuha ng partikular na set ng data.Sa pagtuturong ito, matututunan natin kung paano gumamit ng built-in PHP functions para i-sort ang iba’t ibang uri ng array.

Pagso-sort ng Array Sa Pamamagitan ng Value

Ang pagso-sort ng array sa pamamagitan ng value ng elements nito ay napakadali sa PHP. Maaari kang mamili na panatilihin o tanggalin ang key-value associations, at maaari mo ring tukuyin ang iyong sariling functions para sabihin kung paano ang elements naso-sort. Ipapakita ko kung paano sa bahaging ito ng pagtuturo.

Maaari mong gamitin ang sort(&$array, $sort_flags) na function para ayusin ang values ng array mula sa mababa pataas.Gayunpaman, hindi nito mapapanatili ang kahit na anong key-value associations kapag sino-sort ang array. Ang bagong keys ay nakatalaga sa nasort na elements sa halip na simpleng pag-aayos uli.Sa opsyonal na pangalawang parameter ay matutukoy mo kung paano i-sort ang elements. Maaari itong magkaroon ng anim na iba’t ibang values:

  1. SORT_REGULAR—Maso-sort nito ang values ng hindi na kailangang baguhin ang kanilang types.
  2. SORT_NUMERIC—Iso-sort nito ang values sa pamamagitan ng pagkumpara sa mga ito ayon sa bilang.
  3. SORT_STRING—Iso-sort nito ang values sa pamamagitan ng pagkukumpara sa mga ito bilang strings.
  4. SORT_LOCALE_STRING—Ikukumpara nito ang values bilang string batay sa kasalukuyang locale. Maaari mo ring i-update ang locale ng ikaw lang gamit ang setlocale().
  5. SORT_NATURAL—Iso-sort nito ang items gamit ang “natural ordering” habang kinukumpara ang mga ito bilang strings.
  6. SORT_FLAG_CASE—Maaari itong pagsamahin gamit ang SORT_STRING o SORT_NATURAL para i-turn off ang case-sensitivity habang sino-sort ang strings.

Narito ang ilang halimbawa ng pagso-sort para tulungan kang mabilis na maintindihan ang pagkakaiba sa pagitan ng lahat ng sort flags.

1
<?php
2
3
$random_data = [32508, 98134, "234984", "3249832", "38", 123, "Apple"];
4
5
sort($random_data);
6
echo "Regular Sorting  — ";
7
foreach($random_data as $element) {
8
    echo str_pad($element, 9)." ";
9
}
10
// Regular Sorting  — 38        123       32508     98134     234984    3249832   Apple

11
12
sort($random_data, SORT_NUMERIC);
13
echo "\nNumeric Sorting  — ";
14
foreach($random_data as $element) {
15
    echo str_pad($element, 9)." ";
16
}
17
// Numeric Sorting  — Apple     38        123       32508     98134     234984    3249832

18
19
sort($random_data, SORT_STRING);
20
echo "\nString Sorting   — ";
21
foreach($random_data as $element) {
22
    echo str_pad($element, 9)." ";
23
}
24
// String Sorting   — 123       234984    3249832   32508     38        98134     Apple

Sa halimbawa, sa regular sorting, ang numerical strings ay binabalik sa kanilang numerical values at ang pagso-sort ay nagagawa ng naaayon dito. Ang string na “Apple” ay non-numeric kung kaya hindi ito nagagalaw at naikukumpara bilang string.

Sa pangalawang halimbawa, numeric sorting, gusto natin ang data na ma-sort batay sa numerica value kung kaya ang “Apple” ay binabalik sa numeric value 0 at nauuna. At ang natitirang values ay sino-sort katulad ng inaasahan.

Sa pangatlong halimbawa, lahat ng values ay tinuturing na strings. Ibig sabihin na sa halip na ikinukumpara ang numerical value ng 123 o 3249832 sa 38, kinukumpara sila bilang strings, paisa-isang character lang. Dahil ang “1”ay nauuna sa “3”, ang value123 ay tinuturing na mas mababa sa 38.

Kung gusto mong i-sort ang iyong array values mula sa mataas pababa sa halip na mula sa mababa pataas, maaari mo itong gawin sa tulong ng rsort() function. Tinatanggap nito ang lahat ng parehong parameters bilang sort() subalit sino-sort ang values ng pabaliktad. Hindi rin nito napapanatili ang kahit na anong key-value associations, kung kaya hindi ito ang tamang piliin sa pag-sort ng associative arrays.

I-sort ang Associative Array

Ang key value associations ay nagiging mahalaga kapag ikaw ay gumagawa ng may associative arrays. Tingnan ang sumusunod na halimbawa kung saan ang associative array ay ginagamit para itago ang pangalan ng iba’t ibang tao at ang kanilang paboritong prutas. Kung gusto mong i-sort ang listahan ayon sa alpabeto sa pamamagitan ng pangalan ng mga prutas, gamit ang sort() function mula sa nakaraang bahagi ay magreresulta ito sa pagkawala ng associative keys.

1
<?php
2
3
$fruit_preferences = ["James" => "Orange", "John" => "Banana", "Patricia" => "Apple", "Jennifer" => "Mango", "Mary" => "Grapes"];
4
5
echo "Before Sorting — \n";
6
foreach($fruit_preferences as $person=>$preference) {
7
    echo $person." likes ".$preference."\n";
8
}
9
10
/*

11
Before Sorting — 

12
James likes Orange

13
John likes Banana

14
Patricia likes Apple

15
Jennifer likes Mango

16
Mary likes Grapes

17
*/
18
19
sort($fruit_preferences);
20
21
echo "After Sorting  — \n";
22
foreach($fruit_preferences as $person=>$preference) {
23
    echo $person." likes ".$preference."\n";
24
}
25
26
/*

27
After Sorting  — 

28
0 likes Apple

29
1 likes Banana

30
2 likes Grapes

31
3 likes Mango

32
4 likes Orange

33
*/
34
35
?>

Makikita mo na hindi lang natin nawala ang kaugnayan ng mga tao sa kanilang paboritong prutas, nawala din natin ang mga pangalan ng iba’t ibang tao. Bawat na-sort na value ay may nakatalagang bagong numeric index batay sa posisyon nito sa na-sort na array.

Para matulungan ka kung paano ang gagawin sa problemang ito ng mabilis, ang PHP ay may dalawang iba’t ibang functions kung saan pinapatili nito ang key-value association habang sino-sort ang arrays ayon sa kanilang values. Ang dalawang functions ay assort() at arsort(). Ang sumusunod na code snippet ay sino-sort ang parehong $fruit_preferences array subalit gumagamit ng assort() para magawa ito.

1
<?php
2
3
$fruit_preferences = ["James" => "Orange", "John" => "Banana", "Patricia" => "Apple", "Jennifer" => "Mango", "Mary" => "Grapes"];
4
5
echo "Before Sorting — \n";
6
foreach($fruit_preferences as $person=>$preference) {
7
    echo $person." likes ".$preference."\n";
8
}
9
10
/*

11
Before Sorting — 

12
James likes Orange

13
John likes Banana

14
Patricia likes Apple

15
Jennifer likes Mango

16
Mary likes Grapes

17
*/
18
19
asort($fruit_preferences);
20
21
echo "After Sorting  — \n";
22
foreach($fruit_preferences as $person=>$preference) {
23
    echo $person." likes ".$preference."\n";
24
}
25
26
/*

27
After Sorting  — 

28
Patricia likes Apple

29
John likes Banana

30
Mary likes Grapes

31
Jennifer likes Mango

32
James likes Orange

33
*/
34
35
?>

Maliwanag mula sa halimbawa sa itaas, ang value na Apple ay gumagalaw sa itaas habang pinapanatili nito ang kaugnayan kay Patricia. Ang pangalan ng prutas ay maaaring i-sort ng pabaliktad ng mabilis sa pamamagitan ng paggami ng arsort() function.

Ang parehong functions ay tinatanggap ang parehong sorting flags bilang value ng opsyonal na pangalawang parameters bilang sort() at rsort().

Pag Sort ng Array Elements Sa Pamamagitan ng Value Sa User-Defined Functions

Ang apat na sorting functions ay madaling matutugunan ang iyong karaniwang kailangan sa pagso-sort sa tulong ng iba’t ibang flags. Gayunpaman, minsan ang iyong pamantayan sa pagkukumpara ng array elements ay maaaring iba.

Sabihin na natin na mayroon kang array ng random na mga salita na kailangang i-sort ayon sa alpabeto. Gayunpaman, gusto mo ding i-sort ang mga ito batay sa kanilang haba bago i-sort ang mga ito ayon sa alpabeto. Halimbawa, ang zoo ay mapupunta pagkatapos ng apple sa tradisyunal na pagso-sort ayon sa alpabeto. Gayunpaman, kung nais mong ipakita ang maiiksing salita bago ang mahahaba, ang zoo ay lalabas bago ang apple. Sa parehong set ng mga letra, ang ape ay mapupunta bago ang zoo dahil sa pagkakasunud-sunod na ayon sa alpabeto.

Sa katunayan, ang mga salita ay dating sino-sort batay sa kanilang haba at pagkatapos ang mga salitang may parehong bilang ng mga letra ay sino-sort ayon sa alpabeto sa loob ng kanilang sariling grupo. Ang ganitong uri ng pagso-sort ay hindi bahagi ng PHP kung kaya kailangan nating magsulat ng ating sariling sorting function.

Ang ginagawa ng PHP sa pagkakataong ito ay ang bigyan ka ng ilang functions na maaaring gamitin para ipasa ang array na gusto mong i-sort kasama ang ilang pangalan ng iyong sariling sorting function.

Maaari mo ring gamitin ang usort() function para i-sort ang array values sa regular arrays. At kapareho din nito, uasort() function para i-sort ang values sa associative arrays habang pinapanatili ang key-value associations.

Ang code snippet sa ibaba ay ipinapakita ang isang paraan para matupad ang gawaing ito.

1
<?php
2
3
$random_words = ["ape", "apple", "zoo", "pie", "elephant", "banana", "picnic", "eye"];
4
5
sort($random_words);
6
echo "Regular Sort Function: \n";
7
foreach($random_words as $element) {
8
    echo str_pad($element, 9)." ";
9
}
10
11
/*

12
Regular Sort Function: 

13
ape       apple     banana    elephant  eye       picnic    pie       zoo

14
*/
15
16
function custom_sort($word_a, $word_b) {
17
    if (strlen($word_a) < strlen($word_b)) {
18
        return -1;
19
    }
20
    if (strlen($word_a) == strlen($word_b)) {
21
        return strcmp($word_a, $word_b);
22
    }
23
    if (strlen($word_a) > strlen($word_b)) {
24
        return 1;
25
    }
26
}
27
28
usort($random_words, "custom_sort");
29
echo "\nCustom Sort Function: \n";
30
foreach($random_words as $element) {
31
    echo str_pad($element, 9)." ";
32
}
33
34
/*

35
Custom Sort Function: 

36
ape       eye       pie       zoo       apple     banana    picnic    elephant

37
*/
38
39
?>

Sa callback functions na para sa custom sorting, kailangan nating ibalik ang integer na mas mababa sa 0 para ipahiwatig na ang unang value ay mas mababa kaysa sa pangalawa. Ibalik ang 0 kung ang unang value ay kapareho ng sa pangalawa. Ibalik ang integer na mas mataas sa 0 kung ang unang value ay mas mataas kaysa sa pangalawa.

Dahil ang ating pangunahing sorting criteria ay string length, direkta nating ibabalik ang -1 kung ang unang salita ay mas maiksi kaysa sa pangalawa. At gayon din, direkta nating ibabalik ang 1 kapag ang unang salita ay mas mahaba kaysa sa pangalawa. Kapag ang dalawang salita ay magkapareho ng haba, kinukumpara natin ang mga ito ayon sa alpabeto gamit ang strcmp() function at ibinabalik ang value nito.

Katulad ng makikita mo sa output, ang ating custom sort function ay inaayos uli ang mga salita eksakto sa gusto natin.

Pagso-sort ng Array Sa Pamamagitan ng Key

Ang pag-sort ng array batay sa keys nito ay karaniwan ng mahalaga kapag ikaw ay gumagawa ng may associative arrays. Halimbawa, maaaring mayroon kang array na may impormasyon tungkol sa kabuuang bilang ng paliparan sa iba’t ibang bansa. Ipalagay na natin na ang mga pangalan ng iba’t ibang bansa ay keys at ang bilang ng paliparan ay values, maaarin gusto mong i-sort ang mga pangalan ng bansa ayon sa alpabeto.Napakadali nitong gawin sa functions ksort() and krsort(). Ang parehong functions na ito ay pananatilihin ang key-value association ng array elements pagkatapos ng pagso-sort. Ang function ksort() ay magso-sort ng keys mula sa mababa pataas at ang krsort() ay magso-sort ng keys mula sa mataas pababa.

Narito ang pangunahing halimbawa ng sorting:

1
<?php
2
3
$airport_count = ["United States" => 13513, "Brazil" => 4093, "Mexico" => 1714, "Canada" => 1467, "Russia" => 1218, "Argentina" => 1138, "Bolivia" => 855, "Colombia" => 836, "Paraguay" => 799, "Indonesia" => 673];
4
5
ksort($airport_count);
6
7
foreach($airport_count as $country=>$count) {
8
    echo str_pad($country, 15)." ".$count."\n";
9
}
10
11
/*

12
Argentina       1138

13
Bolivia         855

14
Brazil          4093

15
Canada          1467

16
Colombia        836

17
Indonesia       673

18
Mexico          1714

19
Paraguay        799

20
Russia          1218

21
United States   13513

22
*/
23
24
?>

Maaari mo ring gawin sa PHP ng kahit wala ang iyong sariling custom function function sa pag sort ng array keys gamit ang uksort() function. Katulad ng usort(), sa callback uksort() function kailangan mong ibalik ang integer na mas mababa kaysa 0 kung ang unang key ay tinuturing na mas mababa kaysa sa pangalawa at ang integer ay mas mataas kaysa 0 kung ang unang key ay mas mataas kaysa sa pangalawa. Pinapanatili din ng function na ito ang key-value association ng array elements.

1
<?php
2
3
$airport_count = ["United States" => 13513, "Brazil" => 4093, "Mexico" => 1714, "Canada" => 1467, "Russia" => 1218, "Argentina" => 1138, "Bolivia" => 855, "Colombia" => 836, "Paraguay" => 799, "Indonesia" => 673];
4
5
function custom_sort($word_a, $word_b) {
6
    if (strlen($word_a) < strlen($word_b)) {
7
        return -1;
8
    }
9
    if (strlen($word_a) == strlen($word_b)) {
10
        return strcmp($word_a, $word_b);
11
    }
12
    if (strlen($word_a) > strlen($word_b)) {
13
        return 1;
14
    }
15
}
16
17
uksort($airport_count, "custom_sort");
18
19
foreach($airport_count as $country=>$count) {
20
    echo str_pad($country, 15)." ".$count."\n";
21
}
22
23
/*

24
Brazil          4093

25
Canada          1467

26
Mexico          1714

27
Russia          1218

28
Bolivia         855

29
Colombia        836

30
Paraguay        799

31
Argentina       1138

32
Indonesia       673

33
United States   13513

34
*/
35
36
?>

Sa halimbawa sa itaas, ginamit natin ang custom sort function galing sa nakaraang bahagi para i-sort ang pangalan ng mga bansa una sa pamamagitan ng haba ng kanilang pangalan at ayon sa alpabeto.

Pag-sort ng Multi-Dimensional Arrays sa PHP

Mas karaniwan sa totoong buhay na may gawin gamit ang multi-dimensional na impormasyon. Halimbawa, ang institusyon ay itatago ang mga marka ng lahat ng mga estudyante sa iba’t ibang paksa sa isang table sa halip na gumawa ng bagong tables para sa bawat paksa. Kung itatago mo ang parehong impormasyon sa PHP, gagawin mo din ito gamit ang multi-dimensional array sa halip na hiwalay na array para sa bawat paksa.

Sa pagtuturong ito, matututunan mo kung paano mag-sort ng multi-dimensional array gamit ang listahan ng pinakamataas na gusali sa mundo bilang halimbawa. An gating array maglalaman ng impormasyon tungkol sa pangalan ng gusali, lungsod at bansa kung saan ito matatagpuan, bilang ng palapag at kabuuang taas sa metro kasama din ang taon kung kalian ito nagawa.

Kung gusto mong i-sort ang values sa multi-dimensional array batay sa partikular na field, maaari mo lang gamitin ang usort() function. Ang halimbawa sa ibaba ay sana nakakatulong sa iyo na mas maintindihan ang pamamaraang ito.

1
<?php
2
3
$tallest_buildings = [
4
    ["Building" => "Burj Khalifa","City" => "Dubai","Country" => "United Arab Emirates","Height" => 828,"Floors" => 163,"Year" => 2010],
5
    ["Building" => "Shanghai Tower","City" => "Shanghai","Country" => "China","Height" => 632,"Floors" => 128,"Year" => 2015],
6
    ["Building" => "Abraj Al-Bait Towers","City" => "Mecca","Country" => "Saudi Arabia","Height" => 601,"Floors" => 120,"Year" => 2012],
7
    ["Building" => "Ping An Finance Center","City" => "Shenzhen","Country" => "China","Height" => 599,"Floors" => 115,"Year" => 2017],
8
    ["Building" => "Lotte World Tower","City" => "Seoul","Country" => "South Korea" ,"Height" => 554,"Floors" => 123,"Year" => 2016]
9
];
10
11
function storey_sort($building_a, $building_b) {
12
    return $building_a["Floors"] - $building_b["Floors"];
13
}
14
15
usort($tallest_buildings, "storey_sort");
16
17
foreach($tallest_buildings as $tall_building) {
18
    list($building, $city, $country, $height, $floors) = array_values($tall_building);
19
    echo $building." is in ".$city.", ".$country.". It is ".$height." meters tall with ".$floors." floors.\n";
20
}
21
22
/*

23
Ping An Finance Center is in Shenzhen, China. It is 599 meters tall with 115 floors.

24
Abraj Al-Bait Towers is in Mecca, Saudi Arabia. It is 601 meters tall with 120 floors.

25
Lotte World Tower is in Seoul, South Korea. It is 554 meters tall with 123 floors.

26
Shanghai Tower is in Shanghai, China. It is 632 meters tall with 128 floors.

27
Burj Khalifa is in Dubai, United Arab Emirates. It is 828 meters tall with 163 floors.

28
*/
29
30
?>

Sa halimbawa sa itaas, ang impormasyon tungkl sa bawat gusali ay nakatago sa sarili nitong array sa loob ng pangunahing $tallest_buildings array. Ang storey_sort() function ay nagbabawas lamang ng bilang ng palapag sa pangalawang gusali mula sa una para matukoy kung aling gusali ang mas maliit ayon sa ating pamantayan. Hindi natin kailangang mag-alala tungkol sa pagbabalik ng particular na negative o positive value dahil lahat ng negative values ay nangangahulugan ng mas maliit at lahat ng positive values ay nangangahulugan ng mas malaki.

Sa huli, kailangan lang natin ulitin sa pangunahing array at i-print out ang impormasyon tungkol sa bawat gusali.

Pagtatapos

Sa pagtuturong ito, ipinakita ko ang ilang iba’t ibang functions sa PHP na magagamit sa pag sort ng arrays alinman sa pamamagitan ng kanilang keys o ng kanilang values. Natutunan din natin kung paano mag-sort ng array sa pamamagitan ng keys o values nito gamit ang ating sariling custom sorting na pamantayan sa tulong ng uksrot() and uasort() functions. Tinalakay sa panghuling bahagi kung paano mag sort ng lahat ng values sa multi-dimensional arrays gamit lang ang partikular na field.

Sana ay may natutunan kang bago mula sa pagtuturong ito. Kung mayroon kang kahit na anong tanong o mungkahi ipagbigay-alam sa akin sa comments. Ang pinakamagandang paraan ay ang subukan at gumawa ng ilang iyong sariling halimbawa, pag-sort ng arrays gamit ang function na ito.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.