PHP FAQ

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:

$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ą:

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("&ltbr&gt", $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:

$tab = sortbycol($tab, "|", 1, SORT_NUMERIC, SORT_ASC);
echo join("&ltbr&gt", $tab);

...i to by było na tyle...

Do napisania tej pozycji FAQ zainspirował mnie test PHP ze strony
http://www.kedziora.info/testy/?id=15

FAQ

0 komentarzy