5580657696_bf70c5a0f3_b

Sortowanie tablic po danej wartości indeksu

Czasem mamy dane w tablicach zamiast w bazie danych.

Przykład

Mamy listę użytkowników w kolekcji tablic. Każda tablica składa się z par klucza i wartości

<?php
array(
  'name' => 'Jaś Kowalski',
  'points' => 10
);

Gdy chcemy wyswietlic ranking użytkowników, to chcemy posortować naszą kolekcję tablic z danymi użytkownikach według wartości indeksu ‚points’. 

Rozwiązanie

<?php
$sort = [];

foreach ($collection as $key => $row) {
  $sort[] = $row['points'];
}

array_multisort($sort, SORT_DESC, $collection);

foreach jest w php dość wolny, więc nie polecam tego rozwiązania dla kolekcji danych z 10 000+ elementów. Ale wtedy napewno dane macie już w bazie danych i zrobicie prostego SELECT * FROM users ORDER BY points

2 comments

  1. W kodzie masz błąd. W array_multisort podajesz pustą tablicę $sort, bo wszystkie wartości ‚points’ dodałeś do nieistniejącej tablicy $sort_col.

Odpowiedz na „ofcaAnuluj pisanie odpowiedzi

Twój adres e-mail nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Możesz użyć następujących tagów oraz atrybutów HTML-a: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>