Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Sortowanie tablicy asocjacyjnej po kluczach w ramach jednej wartości
Forum PHP.pl > Forum > PHP
qiqqq
Mam następujący problem. Mam tablicę asocjacyjną wyglądającą w ten sposób:

Array
(
[151] => 0
[149] => 0
[147] => 2
[145] => 0
[143] => 1
[139] => 0
[137] => 1
[135] => 1
[110] => 1
)

Sortuję ją funkcją arsort(), po wartościach (z zachowaniem kluczy) i otrzymuję następujący wynik:

Array
(
[147] => 2
[143] => 1
[135] => 1
[110] => 1
[137] => 1
[139] => 0
[145] => 0
[151] => 0
[149] => 0
)

Teraz po potrzebuję posortować ją po kluczach w ramach konkretnej wartości (czyli posortować klucze rosnąco, dla wartości 0, 1, 2, 3... itd.), żeby uzyskać taki wynik:

Array
(
[147] => 2
[143] => 1
[137] => 1
[135] => 1
[110] => 1
[151] => 0
[149] => 0
[145] => 0
[139] => 0
)

Próbowałem już różnych funkcji sortujących i ostatecznie nic mi z tego nie wypaliło. Czy ma ktoś jakiś pomysł na takie sortowanie tablicy??
Zaznaczę, że krok drugi nie jest konieczny, ostatecznie chodzi mi o uzyskanie ostatniej tablicy z pierwszej (podałem go dla zobrazowania całego procesu).
mar1aczi
natsort - przykład drugi.
grzes999
Z pomocą manuala i przypadku udało mi się stworzyć to co chciałeś. Powinno działać smile.gif

  1. <?
  2. $tablica = array(151 => 0,149 => 0,147 => 2,145 => 0,143 => 1,139 => 0,137 => 1,135 => 1,110 => 1);
  3. $tablica_wzorcowa = array(151 => 0,149 => 0,147 => 2,145 => 0,143 => 1,139 => 0,137 => 1,135 => 1,110 => 1);
  4. $nowa_tablica = array();
  5. foreach ($tablica as $klucz => $wiersz) {
  6. $numer[$klucz] = $wiersz;
  7. $edycja[$klucz] = $klucz;
  8. }
  9. array_multisort($numer, SORT_DESC, $edycja, SORT_DESC, $tablica);
  10. foreach($edycja as $key)
  11. {
  12. $nowa_tablica[$key] = $tablica_wzorcowa[$key];
  13. }
  14. ?>
qiqqq
Dzięki wielkie grzes999, właśnie o to mi chodziło wink.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.