webForumDet fria alternativet

problem med att sortera en array

5 svar · 244 visningar · startad av Qonos

QonosMedlem sedan sep. 2000451 inlägg
#1

Hmm jag må vara trög, men trotts att jag läst manualen så lyckas jag inte med att sortera denna array efter [type].

ksort() gissar jag på att man ska använda, men får ändå inte till det.

Array
(
    [0] => Array
        (
            [name] => typ2
            [type] => 2
        )

    [1] => Array
        (
            [name] => typ1
            [type] => 1
            [answer] => Array
                (
                    [0] => dsf
                    [1] => sdf
                    [2] => sdf
                )

        )

    [2] => Array
        (
            [name] => 32425678
            [type] => 2
        )

)
WiZzLeRMedlem sedan juni 2002369 inlägg
#2
function mu_sort($array, $key_sort) {

   $key_sorta = explode(",", $key_sort);

   $keys = array_keys($array[0]);

     for($m=0; $m < count($key_sorta); $m++){ $nkeys[$m] = trim($key_sorta[$m]); }

   $n += count($key_sorta);

     for($i=0; $i < count($keys); $i++){

         if(!in_array($keys[$i], $key_sorta)){

             $nkeys[$n] = $keys[$i];

             $n += "1";

           }

     }

     for($u=0;$u<count($array); $u++){ 

         $arr = $array[$u];

           for($s=0; $s<count($nkeys); $s++){

               $k = $nkeys[$s];
            
                 $output[$u][$k] = $array[$u][$k];

           } 

     } 

   sort($output);

 return $output;

}

$array[0]['name'] = "typ2";
$array[0]['type'] = 2;

$array[1]['name'] = "typ1";
$array[1]['type'] = 1;

$array[2]['name'] = "typ3";
$array[2]['type'] = 3;

$sorted = mu_sort($array, "type");

print_r($sorted);
MatteMedlem sedan aug. 20002 970 inlägg
#3

Annars tycker jag det bör funka med usort():

function cmp($a, $b) {

   if ($a['type'] == $b['type']) {
      return 0;
   }
   
   return $a['type'] < $b['type'] ? -1 : 1;

}

usort($array, 'cmp');
WiZzLeRMedlem sedan juni 2002369 inlägg
#4

du menar

function cmp($a, $b)
{
   return strcmp($a['type'], $b['type']);
}

$array[0]['name'] = "typ2";
$array[0]['type'] = 2;

$array[1]['name'] = "typ1";
$array[1]['type'] = 1;

$array[2]['name'] = "typ3";
$array[2]['type'] = 3;

usort($array, "cmp");
MatteMedlem sedan aug. 20002 970 inlägg
#5

Nej, jag menar:

function cmp($a, $b) {

   if ($a['type'] == $b['type']) {
      return 0;
   }
   
   return $a['type'] < $b['type'] ? -1 : 1;

}

$array[0]['name'] = "typ2";
$array[0]['type'] = 2;

$array[1]['name'] = "typ1";
$array[1]['type'] = 1;

$array[2]['name'] = "typ3";
$array[2]['type'] = 3;

usort($array, "cmp");

Då kan du även sortera numeriska värden. Med strcmp kommer 2 att vara större än 12.

WiZzLeRMedlem sedan juni 2002369 inlägg
#6

jahååå =)

Genererad på 387 ms · cache AV · v20260730165559-full.f96bc7eb