Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Sortowanie tablicy wielowymiarowej
Forum PHP.pl > Forum > PHP
mimol
Witam, chciałbym uzyskać podobny rezultat (Przykład chyba najgorszy z możliwych)
  1. $tab = array();
  2. $a1=array('id'=>1, 'name'=>'Pierwsze', 'type'=>'movie');
  3. $a2=array('id'=>2, 'name'=>'2nd', 'type'=>'pic');
  4. $a3=array('id'=>3, 'name'=>'dsada', 'type'=>'movie');
  5. $a4=array('id'=>4, 'name'=>'432', 'type'=>'pic');
  6. $a5=array('id'=>5, 'name'=>'2132', 'type'=>'pic');
  7. $tab[]=$a1;
  8. $tab[]=$a2;
  9. $tab[]=$a3;
  10. $tab[]=$a4;
  11. $tab[]=$a5;
  12.  
  13. echo'PIC:';
  14. foreach ($tab as $t){
  15. if($t['type']=='pic') echo $t['id'];
  16. }
  17. echo'movie:';
  18. foreach ($tab as $t){
  19. if($t['type']=='movie') echo $t['id'];
  20. }

1)Użyć array_multisort?
2)Może lepszą opcją jest
  1. $tabPic=array();
  2. $tabMovie=array();
  3. foreach ($tab as $t){
  4. if($t['type']=='pic') $tabPic[]= $t;
  5. if($t['type']=='movie') $tabMovie[]= $t;
  6. }
  7. echo'PIC:';
  8. foreach ($tabPic as $t){
  9. echo $t['id'];
  10. }
  11. echo'movie:';
  12. foreach ($tabMovie as $t){
  13. echo $t['id'];
  14. }

3)Może jakiś inny sposób?
minolone
W temacie masz napisane że chciałbyś posortować tablice wielowymiarową a takiej nie podajesz, możesz użyć funkcji z php.net ,

to jest wielowymiarowa
  1. $array = array(
  2. 'id'=>1,
  3. 'name'=>'Pierwsze',
  4. 'type'=>'movie'
  5. ),
  6. 'id'=>2,
  7. 'name'=>'2nd',
  8. 'type'=>'pic'
  9. ),
  10. 'id'=>3,
  11. 'name'=>'dsada',
  12. 'type'=>'movie'
  13. ),
  14. 'id'=>4,
  15. 'name'=>'432',
  16. 'type'=>'pic'
  17. ),
  18. 'id'=>5,
  19. 'name'=>'2132',
  20. 'type'=>'pic'
  21. ),
  22. );

funkcja
  1. function array_msort($array, $cols)
  2. {
  3. $colarr = array();
  4. foreach ($cols as $col => $order) {
  5. $colarr[$col] = array();
  6. foreach ($array as $k => $row) { $colarr[$col]['_'.$k] = strtolower($row[$col]); }
  7. }
  8. $eval = 'array_multisort(';
  9. foreach ($cols as $col => $order) {
  10. $eval .= '$colarr[\''.$col.'\'],'.$order.',';
  11. }
  12. $eval = substr($eval,0,-1).');';
  13. eval($eval);
  14. $ret = array();
  15. foreach ($colarr as $col => $arr) {
  16. foreach ($arr as $k => $v) {
  17. $k = substr($k,1);
  18. if (!isset($ret[$k])) $ret[$k] = $array[$k];
  19. $ret[$k][$col] = $array[$k][$col];
  20. }
  21. }
  22. return $ret;
  23.  
  24. }

oraz użycie tej funkcji
  1. $arr = array_msort($array, array('type'=>SORT_DESC, 'id' => SORT_ASC));
  2.  
  3. var_dump($arr);
mimol
Ależ oczywiście że $tab jest tablica wielowymiarowa.
Zrobilem sobie swoje testy, z ktorych wynika, ze array_multisort jest troche szybsze
  1. foreach ($tab as $key => $value) {
  2. $type[$key] = $value['type'];
  3. }
  4. array_multisort($type, $tab);


Nie mam pojecia dlaczego twoja funkcja array_msort wyglada tak strasznie... Jeszcze te eval()
minolone
Sorki mój błąd, nie zwróciłem uwagi na $tab, to jest funkcja znaleziona na php.net.
Szkoda że w array_multisort nie można podać od razu klucza z wielowymiarowej tablicy cos na zasadzie
array_multisort(&tablica, parametr z tablicy wielowymiarowej, SORT_ASC) można jedynie posortować tablice wewnątrz.
mimol
no...
sadze jednak ze najszybszym sposobem było by coś pomiędzy multisort a moim sposobem-> nie potrzebuje tej tablic mieć posortowanej. a jedynie wypisywać elementy wg typu -> coś jak grupowanie
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.