|  | 		    
					
        
         
          
         
	
          | |  | sortere data i array Fra : scootergrisen
 | 
 Dato :  12-09-10 13:07
 | 
 |  | Jeg vil gerne sortere dette :
 
 'test' => array(
 array('x', 'x', 'g')
 ,array('x', 'x', 'h')
 ,array('x', 'x', 'v')
 ,array('x', 'x', 'w')
 ,array('x', 'x', 't')
 ,array('x', 'x', 'a')
 ,array('x', 'x', 'h')
 ,array('x', 'x', 'e')
 ,array('x', 'x', 'a')
 ,array('x', 'x', 'x')
 )
 
 så det bliver til dette :
 
 'test' => array(
 array('x', 'x', 'a')
 ,array('x', 'x', 'a')
 ,array('x', 'x', 'e')
 ,array('x', 'x', 'g')
 ,array('x', 'x', 'h')
 ,array('x', 'x', 'h')
 ,array('x', 'x', 't')
 ,array('x', 'x', 'v')
 ,array('x', 'x', 'w')
 ,array('x', 'x', 'x')
 )
 
 Hvordan gør man det ?
 
 
 |  |  | 
  Martin (12-09-2010) 
 
	
          | |  | Kommentar Fra : Martin
 | 
 Dato :  12-09-10 23:16
 | 
 |  | 
 
            On 12-09-2010 21:06, scootergrisen wrote:
 > Jeg vil gerne sortere dette :
 > 
 > 'test' => array(
 >  array('x', 'x', 'g')
 > ,array('x', 'x', 'h')
 > ,array('x', 'x', 'v')
 > ,array('x', 'x', 'w')
 > ,array('x', 'x', 't')
 > ,array('x', 'x', 'a')
 > ,array('x', 'x', 'h')
 > ,array('x', 'x', 'e')
 > ,array('x', 'x', 'a')
 > ,array('x', 'x', 'x')
 > )
 > 
 > så det bliver til dette :
 > 
 > 'test' => array(
 >  array('x', 'x', 'a')
 > ,array('x', 'x', 'a')
 > ,array('x', 'x', 'e')
 > ,array('x', 'x', 'g')
 > ,array('x', 'x', 'h')
 > ,array('x', 'x', 'h')
 > ,array('x', 'x', 't')
 > ,array('x', 'x', 'v')
 > ,array('x', 'x', 'w')
 > ,array('x', 'x', 'x')
 > )
 > 
 > Hvordan gør man det ?
 Hvis dine arrays altid ser sådan ud, så kan du bruge multisort
 array_multisort($test[0], SORT_ASC, SORT_STRING,
                 $test[1], SORT_ASC, SORT_STRING,
       $test[2], SORT_ASC, SORT_STRING
 );
http://se.php.net/array_multisort |  |  | 
  scootergrisen (12-09-2010) 
 
	
          | |  | Kommentar Fra : scootergrisen
 | 
 Dato :  12-09-10 20:10
 | 
 |  | Hvor angiver man hvilket felt man ønsker at sortere efter ?
 
 Her er et andet eksempel.
 
 Dette :
 
 'test' => array(
 array('telefon', 'bip', 'g')
 ,array('ko', 'muh', 'a')
 ,array('mis', 'miau', 'x')
 ,array('bil', 'dut', 'h')
 )
 
 Skal blive til dette :
 
 'test' => array(
 array('ko', 'muh', 'a')
 ,array('telefon', 'bip', 'g')
 ,array('bil', 'dut', 'h')
 ,array('mis', 'miau', 'x')
 )
 
 Der skal sorteres efter det sidste felt i hvert array 'a', 'g', 'h' og
 'x'.
 
 
 |  |  | 
  Martin (13-09-2010) 
 
	
          | |  | Kommentar Fra : Martin
 | 
 Dato :  13-09-10 11:39
 | 
 |  | On 13-09-2010 04:10, scootergrisen wrote:
 > Hvor angiver man hvilket felt man ønsker at sortere efter ?
 >
 > Her er et andet eksempel.
 >
 > Dette :
 >
 > 'test' => array(
 >  array('telefon', 'bip', 'g')
 > ,array('ko', 'muh', 'a')
 > ,array('mis', 'miau', 'x')
 > ,array('bil', 'dut', 'h')
 > )
 
 Dit array ser således ud
 
 $test[0][0][0] = Telefon
 $test[0][0][1] = bip
 $test[0][0][2] = g
 
 $test[0][1][0] = ko
 $test[0][1][1] = muh
 $test[0][1][2] = a
 
 $test[0][2][0] = mis
 $test[0][2][1] = miay
 $test[0][2][2] = x
 
 $test[0][3][0] = bil
 $test[0][3][1] = dut
 $test[0][3][2] = h
 
 array_multisort($test[0][0], SORT_ASC, SORT_STRING,
 $test[0][1], SORT_ASC, SORT_STRING,
 $test[0][2], SORT_ASC, SORT_STRING,
 $test[0][3], SORT_ASC, SORT_STRING
 );
 
 
 
 >
 > Skal blive til dette :
 >
 > 'test' => array(
 >  array('ko', 'muh', 'a')
 > ,array('telefon', 'bip', 'g')
 > ,array('bil', 'dut', 'h')
 > ,array('mis', 'miau', 'x')
 > )
 >
 > Der skal sorteres efter det sidste felt i hvert array 'a', 'g', 'h' og
 > 'x'.
 
 
 
 |  |  | 
  Ronny Olsen (13-09-2010) 
 
	
          | |  | Kommentar Fra : Ronny Olsen
 | 
 Dato :  13-09-10 12:54
 | 
 |  | 
 
            Den 13-09-2010 04:10, scootergrisen skrev:
 > Hvor angiver man hvilket felt man ønsker at sortere efter ?
 >
 > Her er et andet eksempel.
 >
 > Dette :
 >
 > 'test' =>  array(
 >   array('telefon', 'bip', 'g')
 > ,array('ko', 'muh', 'a')
 > ,array('mis', 'miau', 'x')
 > ,array('bil', 'dut', 'h')
 > )
 >
 > Skal blive til dette :
 >
 > 'test' =>  array(
 >   array('ko', 'muh', 'a')
 > ,array('telefon', 'bip', 'g')
 > ,array('bil', 'dut', 'h')
 > ,array('mis', 'miau', 'x')
 > )
 >
 > Der skal sorteres efter det sidste felt i hvert array 'a', 'g', 'h' og
 > 'x'.
 Som Martin skriver skal vi have fat i array_multisort, jeg vil vælge at 
 opdele det i kolonner først og sorterer det efter disse
 <?php
 /*
 $test = array(
       array('telefon', 'bip', 'g'),
       array('ko', 'muh', 'a'),
       array('mis', 'miau', 'x'),
       array('bil', 'dut', 'h')
 );
 */
 $test = array(
    array('x', 'x', 'g'),
    array('x', 'x', 'h'),
    array('x', 'x', 'v'),
    array('x', 'x', 'w'),
    array('x', 'x', 't'),
    array('x', 'x', 'a'),
    array('x', 'x', 'h'),
    array('x', 'x', 'e'),
    array('x', 'x', 'a'),
    array('x', 'x', 'x')
 );
 function SortMultiArray(&$data){
 // http://dk.php.net/array_multisort  Example #3 Sorting database results
    // Obtain a list of columns
    foreach ($data as $key => $row) {
       $col0[$key]  = $row[0];
       $col1[$key] = $row[1];
       $col2[$key] = $row[2];
    }
    // Sort the data with volume descending, edition ascending
    // Add $data as the last parameter, to sort by the common key
    array_multisort($col2, SORT_ASC,  $data);
 }
 print_r($test);
 SortMultiArray($test);
 print_r($test);
 ?>
 -- 
 Med Venlig Hilsen
 Ronny Olsen
http://olsensweb.dk |  |  | 
  Henning (13-09-2010) 
 
	
          | |  | Kommentar Fra : Henning
 | 
 Dato :  13-09-10 13:08
 | 
 |  | 
 
            On 2010-09-12 21:06, scootergrisen wrote:
 > Jeg vil gerne sortere dette :
 > 
 > 'test' => array(
 >  array('x', 'x', 'g')
 > ,array('x', 'x', 'h')
 > ,array('x', 'x', 'v')
 > ,array('x', 'x', 'w')
 > ,array('x', 'x', 't')
 > ,array('x', 'x', 'a')
 > ,array('x', 'x', 'h')
 > ,array('x', 'x', 'e')
 > ,array('x', 'x', 'a')
 > ,array('x', 'x', 'x')
 > )
 > 
 > så det bliver til dette :
 > 
 > 'test' => array(
 >  array('x', 'x', 'a')
 > ,array('x', 'x', 'a')
 > ,array('x', 'x', 'e')
 > ,array('x', 'x', 'g')
 > ,array('x', 'x', 'h')
 > ,array('x', 'x', 'h')
 > ,array('x', 'x', 't')
 > ,array('x', 'x', 'v')
 > ,array('x', 'x', 'w')
 > ,array('x', 'x', 'x')
 > )
 > 
 > Hvordan gør man det ?
 Der er kommet en masse løsninger, men hvorfor ikke bare bruge uasort ?
    function cmp($a, $b) {
        if ($a[2] == $b[2]) {
            return 0;
        }
        return ($a[2] < $b[2]) ? -1 : 1;
    }
    uasort($array, 'cmp');
 kode er klippet næsten direkte fra
http://dk.php.net/manual/en/function.uasort.php Eneste ændring er at den checker på $a[2] i stedet for $a, hhv $b
 /Henning
            
             |  |  | 
  scootergrisen (13-09-2010) 
 
	
          | |  | Kommentar Fra : scootergrisen
 | 
 Dato :  13-09-10 07:51
 | 
 |  | Tak til allesammen. Det ser ud til at virke som jeg vil have det nu.
 Og jeg læste mig frem til hvordan man lavede det case-insensitive.
 Det eneste der ikke virker er æ, ø, å men det jo typisk.
 
 Der er nogen grund til der står &$data og ikke $data i funktionens
 argument ?
 
 function SortMultiArray(&$data){
 
 Hvad betyder det & ?
 
 
 |  |  | 
  Henning (13-09-2010) 
 
	
          | |  | Kommentar Fra : Henning
 | 
 Dato :  13-09-10 15:17
 | 
 |  | On 2010-09-13 15:51, scootergrisen wrote:
 > Der er nogen grund til der står &$data og ikke $data i funktionens
 > argument ?
 >
 > function SortMultiArray(&$data){
 >
 > Hvad betyder det & ?
 
 & gør at der overføres en pointer til de originale data, ikke en kpi af
 dine data.
 
 <?php
 function a($local) {
 $local++;
 echo "local er nu $local";
 }
 
 function b(&$local) {
 $local++;
 echo "local er nu $local";
 }
 
 $test = 1;
 
 echo "test er nu $test<br>";
 a($test);
 echo "test er nu $test<br>";
 b($test);
 echo "test er nu $test<br>";
 ?>
 
 vil give:
 test er nu 1
 local er nu 2
 test er nu 1
 local er nu 2
 test er nu 2
 
 /Henning
 
 
 |  |  | 
  scootergrisen (13-09-2010) 
 
	
          | |  | Kommentar Fra : scootergrisen
 | 
 Dato :  13-09-10 08:49
 | 
 |  | Ok tak.
 
 
 |  |  | 
 |  |