Avatar billede intenz Novice
23. februar 2005 - 13:08 Der er 11 kommentarer og
1 løsning

Multi arrays

Nu gider jeg ikke rode med det mere, så nu kommer der bare et spørgsmål.

Hvordan henter jeg disse 3 variabler ud igen fra mit array?

array(1) {
  [1]=>
  array(3) {
    ["hits"]=>
    string(1) "0"
    ["date"]=>
    string(47) "Tirsdag den 1. februar 2005"
    ["procent"]=>
    string(2) "0%"
  }
}

Og hvordan kan jeg sortere variablerne efter hits når der er flere?

Jeg har forsøgt mig lidt med:
array_multisort($hits, SORT_DESC, $date, $procent);

Men jeg fatter det ikke helt.
Avatar billede coderdk Praktikant
23. februar 2005 - 13:10 #1
Du hiver d.eks. date ud med $array[1]['date']...
Du skal bruge usort() til at sortere med.
Avatar billede detox Nybegynder
23. februar 2005 - 13:25 #2
Hvis du vil sortere på hits, kan det gøres sådan:

function cmp($a, $b)
{
  if ($a == $b) {
      return 0;
  }
  return ($a < $b) ? -1 : 1;
}
usort($array, "cmp");
Avatar billede coderdk Praktikant
23. februar 2005 - 13:27 #3
Jeg tror detox mener:

function cmp($a, $b)
{
  if ($a['hits'] == $b['hits']) {
      return 0;
  }
  return ($a['hits'] < $b['hits']) ? -1 : 1;
}
usort($array, "cmp");

:)
Avatar billede detox Nybegynder
23. februar 2005 - 13:32 #4
coderdk -> Næ, jeg mente faktisk det jeg skrev, da 'hits' er index 0 bliver den jo valgt automatisk :O)
Avatar billede intenz Novice
23. februar 2005 - 13:33 #5
Perfekt, så virker det.
Avatar billede coderdk Praktikant
23. februar 2005 - 13:36 #6
detox, nej det er jo et multidimensionelt array $array[index][hits] :)
Avatar billede detox Nybegynder
23. februar 2005 - 13:45 #7
Javel ja, men den sorterer nu ikke desto mindre efter 'hits' i mit eksempel. Men det bliver selvfølgelig tydeliggjort med dit eksempel.
Avatar billede detox Nybegynder
23. februar 2005 - 13:47 #8
Her er beviset:

<pre>
<?php
$arr = array(1=>array('hits'=>54, 'date'=>'12-12-2004', 'procent'=>1),
    2=>array('hits'=>36, 'date'=>'12-12-2004', 'procent'=>4),
    3=>array('hits'=>61, 'date'=>'12-12-2004', 'procent'=>3),
    4=>array('hits'=>6, 'date'=>'12-12-2004', 'procent'=>2));

function cmp($a, $b)
{
  if ($a == $b) {
      return 0;
  }
  return ($a < $b) ? -1 : 1;
}
usort($arr, "cmp");
print_r($arr);
?>
</pre>
Avatar billede coderdk Praktikant
23. februar 2005 - 13:50 #9
Jeg tror det er et tilfælde - Du sammenligner to værdien af to arrays, og ikke 'hits':

    $array1 = array( "a", "b", "c" );
    $array2 = array( "b", "c", "d" );
   
    echo ( $array1 < $array2 ? "mindre" : "større" );

og:

    $array1 = array( "a", "b", "c", "d" );
    $array2 = array( "b", "c", "d" );
   
    echo ( $array1 < $array2 ? "mindre" : "større" );

:)
Avatar billede detox Nybegynder
23. februar 2005 - 13:52 #10
Det fremgår nu osse af manualen; Example 2. usort() example using multi-dimensional array
http://dk2.php.net/manual/en/function.usort.php
Avatar billede coderdk Praktikant
23. februar 2005 - 13:58 #11
Ja, netop, der bruger de også nøglen ;)

<?php
function cmp($a, $b)
{
  return strcmp($a["fruit"], $b["fruit"]);
}

$fruits[0]["fruit"] = "lemons";
$fruits[1]["fruit"] = "apples";
$fruits[2]["fruit"] = "grapes";

usort($fruits, "cmp");

while (list($key, $value) = each($fruits)) {
  echo "\$fruits[$key]: " . $value["fruit"] . "\n";
}
?>
Avatar billede detox Nybegynder
23. februar 2005 - 14:02 #12
Ja, det gør de sørme osse ;O) Skægt nok at det virker uden, men nu vil jeg osse bruge nøglen for en ordens skyld :O)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester