Sortowanie tablic z uwzględnieniem specyficznych potrzeb aplikacji – sortowanie hierarchiczne
Założenie: Posortujemy listę kategorii produktów, które mają strukturę drzewiastą (kategorie podrzędne). Chcemy uzyskać posortowaną listę, zachowując relacje hierarchiczne między kategoriami.
Krok po kroku:
- Przygotowanie danych: Zdefiniujmy tablicę asocjacyjną reprezentującą kategorie produktów. Każda kategoria będzie miała identyfikator, nazwę i identyfikator rodzica (0 dla kategorii głównych).
- Funkcja sortowania: Napiszemy funkcję, która posortuje tablicę, uwzględniając relacje rodzic-dziecko. Użyjemy funkcji `usort` z własną funkcją porównującą.
- Wyświetlenie wyników: Wyświetlimy posortowaną tablicę.
$kategorie = [
['id' => 1, 'nazwa' => 'Elektronika', 'rodzic' => 0],
['id' => 2, 'nazwa' => 'Komputery', 'rodzic' => 1],
['id' => 3, 'nazwa' => 'Laptopy', 'rodzic' => 2],
['id' => 4, 'nazwa' => 'Telefony', 'rodzic' => 1],
['id' => 5, 'nazwa' => 'RTV', 'rodzic' => 0],
['id' => 6, 'nazwa' => 'Telewizory', 'rodzic' => 5],
['id' => 7, 'nazwa' => 'Sprzęt audio', 'rodzic' => 5],
];
function sortujKategorie($a, $b) {
if ($a['rodzic'] == $b['rodzic']) {
return strcmp($a['nazwa'], $b['nazwa']); // Sortuj alfabetycznie, jeśli ten sam rodzic
}
return $a['rodzic'] - $b['rodzic']; // Sortuj po id rodzica
}
usort($kategorie, 'sortujKategorie');
foreach ($kategorie as $kategoria) {
echo $kategoria['nazwa'] . "
";
}
Powyższy kod posortuje tablicę $kategorie najpierw po identyfikatorze rodzica, a następnie alfabetycznie dla kategorii o tym samym rodzicu.
Ten przykład pokazuje podstawy sortowania tablic w PHP z uwzględnieniem specyficznych warunków. Zachęcamy do eksperymentowania z różnymi funkcjami sortowania i warunkami porównywania, aby dostosować je do własnych potrzeb.