[#] Sortowanie tablicy a sprawa kodowania znaków w php

( Ostatnio zmieniony śr., 28/05/2008 - 15:17 )
 

Jak zrobić sortowanie tablicy z uwzględnieniem kodowania znaków? Wcale nie trudno.

Badanie obsługiwanych języków:

W zależności od ustawień serwera i zainstalowanych locale, może okazać się że nie ma wsparcia dla naszego języka.

function list_system_locales() {
  /*
   ob_start();
   system('locale -a');
    $str = ob_end_clean();
    return split("\\n", trim($str));
  */
  exec('locale -a',$ar);
  foreach ($ar as $l) {
    $locales[$l] = $l;
  }

  return $locales;
}

która zwróci nam tablicę coś na wzór: $locales[‚pl_PL­.UTF8‘] = ‚pl_PL.UTF8‘

Obsługa flag dla sort()

Sortowanie z uwzględnieniem flag, a dokładniej jednej: SORT_LOCALE_STRING dostępne jest jedynie dla silnika PHP od wersji >=4.4.0 oraz >= 5.0.2. Natomiast w wersji PHP 6 należy zamiast setlocale() użyć i18n_loc_set_­default()

Więcej informacji uzyskasz na: http://pl.php.net/…ion.sort.php

Użycie sort()

Użyj funkcji sort() lub jej pochodnych: arsort(), asort(), ksort(), rsort(), usort(), uksort(), array_multisort(), krsort(), natsort(), natcasesort(), w zależności od potrzeb i sposobu sortowania. Tutaj sortujemy po kluczach z użyciem ksort(). Jeśli użyjesz innej funkcji sprawdź jej argumenty na http://pl.php.net/manual/pl/

// sprawdzamy wsparcie dla setlocale (po swojemu?)
$wsparcie_setlocale = 0;
// domyślne locale lub pobrane z powyższej funkcji
$moje_locale = 'pl_PL.UTF8';

 if ($wsparcie_setlocale == 1) {
   // ustawiamy nasze locale
   setlocale(LC_ALL, $moje_locale);
   // sortujemy z uwzględnieniem znaków narodowych
   ksort($moja_tablica, SORT_LOCALE_STRING);
   // ustawiamy z powrotem na domyślne locale
   // UWAGA: bez tego count($moja_tablica) nie działa poprawnie
   setlocale(LC_ALL, NULL);
 }
 else {
   ksort($moja_tablica); //--- bez wsparcia dla setlocale
 }
Twoja ocena: Brak Średnio: 4 (1 vote)

Dodaj nową odpowiedź

Informacja:

Osoby zamieszczające wypowiedzi naruszające prawo lub prawem chronione dobra osób trzecich, mogą ponieść z tego tytułu odpowiedzialność karną lub cywilną. Upewnij się, że twoja wypowiedź nie godzi w niczyje mienie.

  • Internal paths in single or double quotes, written as "internal:node/99", for example, are replaced with the appropriate absolute URL or path. Paths to files in single or double quotes, written as "files:somefile.ext", for example, are replaced with the appropriate URL that can be used to download the file.
  • Adresy internetowe są automatycznie zamieniane w odnośniki, które można kliknąć.
  • Dozwolone znaczniki HTML: <strong> <blockquote> <code>
  • Znaki końca linii i akapitu dodawane są automatycznie.

Więcej informacji na temat formatowania

Łapirobot
Proszę odpowiedzieć
f
L
8
X
v
S
p
m
F
3
Enter the code without spaces and pay attention to upper/lower case.