Avatar billede Slettet bruger
05. september 2008 - 15:33 Der er 4 kommentarer og
1 løsning

sortering af array

Hej Eksperter

Jeg har et array jeg gerne vil have sorteret. Jeg kan ikke selv overskue hvordan det gøres.. Har I nogle ideer?

arrayet ser således ud:
array(
0=>
array('id'=>2,'parent'=>0, ... 'ad'=>array('title'=>'overskrift','description' ...
1=>
array('id'=>2,'parent'=>0, ... 'ad'=>array('title'=>'overskrift','description' ...
2=>
array('id'=>2,'parent'=>0, ... 'ad'=>array('title'=>'overskrift','description' ...

osv.

altså jeg skal have mit array sorteret efter $array[$i][ad][title]

kan det lade sig gøre overhovedet?
Er der en smart funktion, eller hvordan laver man en selv?
Avatar billede htx98i17 Professor
05. september 2008 - 16:06 #1
Avatar billede fojensen Nybegynder
06. september 2008 - 11:42 #2
Jeg kan se ud af dit spm. at du allerede har styr på en hel masse om arrays, så jeg poster lige et eksempel jeg tidliger har arbejdet med...

-----/kode-----
// array(TYPE, NAME, SIZE)
$arrFiles[] = array("txt", "a.txt", 56);
$arrFiles[] = array("php", "connect.php", 187);
$arrFiles[] = array("php", "index.php", 42);
$arrFiles[] = array("js", "javascript.js", 192);
$arrFiles[] = array("txt", "z.txt", 36);

if (isset($_GET['order'])) {
$order_by = $_GET['order'];
  for ($i=0; $i<count($arrFiles); $i++) { // tæller hvor mange filer der findes
  $arrayToSortAfter[] = $arrFiles[$i][$order_by];  // laver et supplerende array der skal sorteres efter
  }
}

//print_r($arrFiles);
echo "<br/>\n";
echo "arrayToSortAfter<br/>\n";
print_r($arrayToSortAfter); // udskriver det array der skal sorteres efter

if ($order_by == "2"){ // hvis sortering efter størrelse
array_multisort($arrayToSortAfter, SORT_DESC, SORT_NUMERIC, $arrFiles); // sorterer array efter et andet array
} else {
array_multisort($arrayToSortAfter, SORT_ASC, SORT_STRING, $arrFiles); // sorterer array efter et andet array
}
echo "<br/>\n";
echo "array sorteret<br/>\n";
print_r($arrFiles); // udskriver det sorterede array
-----/kode-----

Håber det kan hjælpe dig videre, og det med at lave $arrayToSortAfter kan selvfølgelig laves på mange måder, og det kan du jo bare lave som du bedst ka li' det.
Avatar billede fojensen Nybegynder
06. september 2008 - 22:16 #3
prøvede også lige at omskrive til noget der passer til dit array (forudsat at dit array hedder $array)...

-----kode-----
echo "array sorteret efter "<a href = \"?order=title\">title</a>"<br/>\n"; // link til sortering efter title
echo "array sorteret efter "<a href = \"?order=description\">description</a>"<br/>\n"; // link til sortering efter description

if (isset($_GET['order'])) {
$order_by = $_GET['order'];
  for ($i=0; $i<count($array); $i++) { // tæller hvor mange keys der findes $array
  $arrayToSortAfter[] = $array[$i][ad][$order_by];  // laver et supplerende array der skal sorteres efter
  }
echo "<br/>\n";
echo "arrayToSortAfter<br/>\n";
print_r($arrayToSortAfter); // udskriver det array der skal sorteres efter
array_multisort($arrayToSortAfter, SORT_ASC, $array); // sorterer array efter et andet array
echo "<br/>\n";
echo "array sorteret<br/>\n";
print_r($array); // udskriver det sorterede array
}
-----/kode-----

i eksemplet bruger jeg print_r() til at udskrive arrays, men selv bruger jeg ofte print_a() som er en funktion jeg har fået fra andre i sin tid. Den udskriver arrays mere overskueligt i browseren, og den kommer her:

function print_a($subject){ // funktion til udskrift af arrays
echo str_replace("=>","&#8658;",str_replace("Array","<font color=\"red\"><b>Array</b></font>",nl2br(str_replace(" ","&nbsp;",print_r($subject,true)))));
}
Avatar billede Slettet bruger
07. september 2008 - 12:46 #4
Du er et geni, fojensen ;-)
smid et svar, så får du dine velfortjente point. Det virkede i første forsøg
Avatar billede fojensen Nybegynder
07. september 2008 - 17:59 #5
En fornøjelse at kunne hjælpe...
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