() 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:
-
SORT_REGULAR
—Maso-sort nito ang values ng hindi na kailangang baguhin ang kanilang types. -
SORT_NUMERIC
—Iso-sort nito ang values sa pamamagitan ng pagkumpara sa mga ito ayon sa bilang. -
SORT_STRING
—Iso-sort nito ang values sa pamamagitan ng pagkukumpara sa mga ito bilang strings. -
SORT_LOCALE_STRING—
Ikukumpara nito ang values bilang string batay sa kasalukuyang locale. Maaari mo ring i-update ang locale ng ikaw lang gamit angsetlocale()
. -
SORT_NATURAL—
Iso-sort nito ang items gamit ang “natural ordering” habang kinukumpara ang mga ito bilang strings. -
SORT_FLAG_CASE
—Maaari itong pagsamahin gamit angSORT_STRING
oSORT_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_building
s 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.