Jak posortować tablice według konkretnej kolumny?
piechnat
Załóżmy że mamy plik.txt
o zawartości:
zuza|8|1
ania|3|8
ela|22|5
ola|12|9
Wczytujemy go do tablicy:
<?php
$tab = explode("\n", str_replace("\r", "", join("", file("plik.txt"))));
Teraz w tablicy $tab
mamy kolejne linie pliku bez znaków końca (\r
i \n
). Jeżeli przyjmiemy że kolejne elementy tej tablicy są mniejszymi tablicami gdzie separatorem jest znak "|"
to żeby posortować tę że tablice według konkretnej kolumny, możemy posłużyć się taką funkcją:
<?php
function sortbycol($tab, $sep, $n, $flag1, $flag2) {
for($i = 0; $i < count($tab); $i++) {
$t1 = explode($sep, $tab[$i]);
$t2[] = $t1[$n];
}
array_multisort($t2, $flag1, $flag2, $tab);
return $tab;
}
$tab = sortbycol($tab, "|", 0, SORT_STRING, SORT_DESC);
echo join("<br>", $tab);
Powyższy kod spowoduje wyświetlenie tablicy posortowanej alfabetycznie
malejąco według pierwszej kolumny:
zuza|8|1
ola|12|9
ela|22|5
ania|3|8
Opis argumentów funkcji sortbycol:
$tab - tablica
$sep - separator
$n - numer kolumny indeksowany od zera
$flag1 - flag typu sortowania,
dostępne są następujące:
SORT_REGULAR - porównuj elementy normalnie
SORT_NUMERIC - porównuj elementy numerycznie
SORT_STRING - porównuj elementy jak stringi
$flag2 - flag porządku sortowania
dostępne są następujące:
SORT_ASC - sortuj w porządku rosnącym
SORT_DESC - sortuj w porządku malejącym
Czyli jeśli chcielibyśmy uzyskać sortowanie numeryczne według drugiej kolumny
w porządku rosnącym:
ania|3|8
zuza|8|1
ola|12|9
ela|22|5
to powinniśmy posłużyć się takim kodem:
<?php
$tab = sortbycol($tab, "|", 1, SORT_NUMERIC, SORT_ASC);
echo join("<br>", $tab);