2012-04-01 2 views
0
Armstuff > xxxxx 
Uncategorized 
Biler > test 
HOVED > SUB 
Computere > Software 
Smykker 
Computere > Komponenter > RAM 
sss > bbb > kkk 
Computere > Komponenter > Harddiske 
gg 
Computere > Gadgets 
Biler > Ekstraudstyr 
sss > ddd 

Dies ist eine Liste meiner Kategorien, die von diesem Code ausgegeben:Kategorien sortieren nach Namen mit Array in PHP

<?php 
foreach($categories as $category) 
{ 
    echo $category['name'] . " <br />"; 
} 
?> 

nun die Kategorienamen sub $ Kategorien richtig definiert wird, die zuvor in dem Code durch :

foreach($categories as &$category) 
{ 

    $parent = $category['parent']; 
    while($parent > 0) 
    { 
     $parent_row = $db->select('name', 'paraent')->from('categories')->where('id', '=', $parent)->execute()->as_array(); 
     $parent_row = $parent_row[0]; 
     $category['name'] = $parent_row['name'] . " > {$category['name']}"; 
     $parent = $parent_row['parent']; 

    } 
} 

ich die Ausgabe zu Ausgabe alphabetisch will, so aus dem obigen Beispiel, es ausgeben soll so etwas wie:

Armstuff > xxxxx 
Biler > test 
Biler > Ekstraudstyr 
Computere > Gadgets 
Computere > Komponenter > Harddiske 
Computere > Komponenter > RAM 
Computere > Software 
gg 
HOVED > SUB 
Smykker 
sss > bbb > kkk 
sss > ddd 
Uncategorized 

Ich versuchte die einfach sort(), asort() aber sie würde nicht für mich arbeiten. Wie kann ich das machen? Vielen Dank im Vorwärts

+0

Seine nicht gut, so viele Abfragen in der Schleife auszuführen – safarov

Antwort

0

usort Versuchen Sie, weil Sie Ihre eigenen comparer definieren können (http://at2.php.net/manual/de/function.usort.php)

Beispiel:

function cmpCategories($a, $b) { 
    if ($a["name"] == $b["name"]) { 
     return 0; 
    } 
    return ($a["name"] < $b["name"]) ? -1 : 1; 
} 

usort($categories, "cmpCategories");