Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Sortowanie skomplikowanej tablicy
Forum PHP.pl > Forum > PHP
phoenix84
Witam
szukam i szukam na tym forum i nie moge znalezc...
mam sobie tablice dwuwymiarowa...
w kazdym wierszu jest nazwisko imie pesel
i takich wierszy jest X... smile.gif
i teraz jak posortowac te tablice wzgledem imienia czy nazwiska... smile.gif
czyli jak posortowac wzgledem jednej kolumny, ale tak, by wiersze pozostawaly bez zmian... jedynie ich kolejnosc ma sie zmeiniac...

pozdrawiam

Phoenix
dr_bonzo
usort + wlasna funkcja porownujaca
---
znalazlem swoj kod:
  1. <pre>
  2. <?php
  3. $aArray[] = array( 'numer' =>  1, 'typ' => 'xxxxx' );
  4. $aArray[] = array( 'numer' => 10, 'typ' => 'xxxxx' );
  5. $aArray[] = array( 'numer' => 11, 'typ' => 'xxxxx' );
  6. $aArray[] = array( 'numer' => 12, 'typ' => 'xxxxx' );
  7. $aArray[] = array( 'numer' =>  3, 'typ' => 'xxxxx' );
  8. $aArray[] = array( 'numer' =>  2, 'typ' => 'xxxxx' );
  9. $aArray[] = array( 'numer' =>  5, 'typ' => 'xxxxx' );
  10. $aArray[] = array( 'numer' =>  4, 'typ' => 'xxxxx' );
  11.  
  12. if ( usort( $aArray, &#092;"compareElements\" ) )
  13. {
  14. print_r( $aArray );
  15. }
  16.  
  17.  
  18. function compareElements( $a, $b )
  19. {
  20. return ( $a[ 'numer' ] - $b[ 'numer' ] );
  21. }
  22. ?>
  23. </pre>
phoenix84
troche sie pobawilem funkcja sort(); i w przypadku sortowania tablicy jednowymiarowej to wszystko mam jasne... ale jesli kaze mu sortowac wielowymiarowa... to niby sortuje w sposob jaki chce... czyli dla kazdego wiersza wedlug ktorejs komorki... ale jak ustawic wedlug ktorej? np. wedlug pierwszej... bo sortowal mi wedlug pierwszej... wiec wymyslilem, ze przesune wszystkie dane o jeden, a do pierwszej kolumny wstawie dane wedlug ktorych ma sortowac... to on jak na zlosc teraz sortuje wedlug drugiej kolumny... w jaki sposob to dziala, bo nie moge znalezc zaleznosci... smile.gif
albo sie myle i on sortuje wedlug zupelnie czegos innego, a ja nie wiem czego... bo jak nie wlaczam sort(); to mam taka kolejniosc jak wprowadzilem... a jak wlacze sort(); to on mi sortuje, wedlug czegos (akurat w moim przypadku wobec nazwisk, niezaleznie w ktorej sa kolumnie, ale to moze byc przypadek), ale jak usune nazwisko to mi sortuje wobec imion itd. wiec nie kumam jak to dziala... mimo, ze namieszlaem to chyba kumacie o co mi chodzi...

po prostu jak dziala sort(); (wedlug czego sortuje) w przypadku tablicy dwuwymiarowej... smile.gif

Phoenix
MoD
w manualu w "User Contributed Notes" przy sort()" title="Zobacz w manualu PHP" target="_manual jest funkcja mu_sort, ja z niej korzystam w Top5Download i działa bardzo dobrze
  1. <?php
  2.  
  3. // +-- First let's set up the multidimensional array.
  4.  
  5. $array[0][username] = &#092;"user_name\";
  6. $array[0][password] = &#092;"pass_word\";
  7. $array[0][account_type] = &#092;"admin\";
  8.  
  9. $array[1][username] = &#092;"eman_resu\";
  10. $array[1][password] = &#092;"drow_ssap\";
  11. $array[1][account_type] = &#092;"user\";
  12.  
  13. $array[2][username] = &#092;"php_roxs\";
  14. $array[2][password] = &#092;"yesitdoes\";
  15. $array[2][account_type] = &#092;"admin\";
  16.  
  17. // +-- Run it through the function.
  18. $sorted = mu_sort($array, &#092;"password,account_type\");
  19.  
  20. // +-- Print out the results[just for this test]
  21. print_r($sorted);
  22.  
  23. // +-- Here's the function:
  24. function mu_sort ($array, $key_sort) { // start function
  25.  
  26.  $key_sorta = explode(&#092;",\", $key_sort);
  27.  
  28.  $keys = array_keys($array[0]);
  29.  
  30.  // sets the $key_sort vars to the first
  31.  for($m=0; $m < count($key_sorta); $m++){ $nkeys[$m] = trim($key_sorta[$m]); }
  32.  
  33.  $n += count($key_sorta); // counter used inside loop
  34.  
  35.  // this loop is used for gathering the rest of the
  36.  // key's up and putting them into the $nkeys array
  37.  for($i=0; $i < count($keys); $i++){ // start loop
  38.  
  39.  // quick check to see if key is already used.
  40.  if(!in_array($keys[$i], $key_sorta)){
  41.  
  42.  // set the key into $nkeys array
  43.  $nkeys[$n] = $keys[$i];
  44.  
  45.  // add 1 to the internal counter
  46.  $n += &#092;"1\";
  47.  
  48.  } // end if check
  49.  
  50.  } // end loop
  51.  
  52.  // this loop is used to group the first array [$array]
  53.  // into it's usual clumps
  54.  for($u=0;$u<count($array); $u++){ // start loop #1
  55.  
  56.  // set array into var, for easier access.
  57.  $arr = $array[$u];
  58.  
  59.  // this loop is used for setting all the new keys
  60.  // and values into the new order
  61.  for($s=0; $s<count($nkeys); $s++){
  62.  
  63.  // set key from $nkeys into $k to be passed into multidimensional array
  64.  $k = $nkeys[$s];
  65.  
  66.  // sets up new multidimensional array with new key ordering
  67.  $output[$u][$k] = $array[$u][$k];
  68.  
  69.  } // end loop #2
  70.  
  71.  } // end loop #1
  72.  
  73.  // sort
  74.  sort($output);
  75.  
  76.  // return sorted array
  77.  return $output;
  78.  
  79. } // end function
  80.  
  81. ?>
bendi
array_multisort" title="Zobacz w manualu PHP" target="_manual
  1. <pre>
  2. <?php
  3. //dodalem costam do xxxxx zeby sprawdzic czy polaczenia kluczy sa zachowywane
  4. $aArray[] = array( 'numer' =>  1, 'typ' => '1xxxxx' );
  5. $aArray[] = array( 'numer' => 10, 'typ' => '10xxxxx' );
  6. $aArray[] = array( 'numer' => 11, 'typ' => '11xxxxx' );
  7. $aArray[] = array( 'numer' => 12, 'typ' => '12xxxxx' );
  8. $aArray[] = array( 'numer' =>  3, 'typ' => '3xxxxx' );
  9. $aArray[] = array( 'numer' =>  2, 'typ' => '2xxxxx' );
  10. $aArray[] = array( 'numer' =>  5, 'typ' => '5xxxxx' );
  11. $aArray[] = array( 'numer' =>  4, 'typ' => '4xxxxx' );
  12.  
  13. for($i=0;$i<count($aArray);$i++) $aN[] = $aArray[$i]['numer'];
  14.  
  15. array_multisort( $aN, $aNArray );
  16.  
  17. ?></pre>
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.