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("&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:

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

0 komentarzy