Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Tasowanie tablicy asocjacyjnej
Forum PHP.pl > Forum > Przedszkole
lukasamd
Witam,
mam tablicę wyglądającą tak:

Kod
$array['A'] = 'Tekst 1';
$array['B'] = 'Tekst 2';
$array['C'] = 'Tekst 3';
$array['D'] = 'Tekst 4';


Chciałbym ją sobie posortować losowo, a więc przetasować.
Gdy używam shuffle, niestety tracę nadane klucze, które są mi potrzebne.

W manualu jeden z pierwszych komentarzy do shuffle daje takie rozwiązanie:

  1. function shuffle_assoc(&$array) {
  2. $keys = array_keys($array);
  3.  
  4. shuffle($keys);
  5.  
  6. foreach($keys as $key) {
  7. $new[$key] = $array[$key];
  8. }
  9.  
  10. $array = $new;
  11.  
  12. return true;
  13. }


No i działa bardzo dobrze.
Ale czy nie ma wbudowanej w PHP funkcji od czegoś takiego?

Wiem, pytanie może i dziwne, ale zasób funkcji często okazuje się większy, niż nam się pierwotnie wydaje, a takie tasowanie chyba czasami jest przydatne. blinksmiley.gif
wookieb
Nie ma takiej funkcji
vermis
Tablica asocjacyjna umożliwia nazywanie elementów podobnie jak właściwości obiektu. A tasowanie właściwości obiektu jest raczej bez sensu.
Sugeruję zastanowić się nad inną konstrukcją tej tablicy, a nie na szukaniu funkcji do jej tasowania.
lukasamd
W sumie można rzeczywiście zmienić jej konstrukcję, np:

  1. $array = array(
  2. 'key' => 'A',
  3. 'val' => 'Tekst 1',
  4. ),
  5. 'key' => 'B',
  6. 'val' => 'Tekst 2',
  7. ),
  8. 'key' => 'C',
  9. 'val' => 'Tekst 3',
  10. ),
  11. 'key' => 'D',
  12. 'val' => 'Tekst 4',
  13. ),
  14. );
  15.  
  16.  
  17. shuffle($array);
  18.  
  19.  
  20.  
  21. for ($i = 0; $i < 4; $i++)
  22. {
  23. echo $array[$i]['key'] . ' = ' . $array[$i]['val'] . '<br />';
  24. }
wookieb
Cytat(vermis @ 7.06.2010, 13:13:11 ) *
Tablica asocjacyjna umożliwia nazywanie elementów podobnie jak właściwości obiektu. A tasowanie właściwości obiektu jest raczej bez sensu.

Może olśnisz nas swoim tokiem myślenia na temat bezsensowności tasowania kolejności właściwości?
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.