PHP: Sort mehrdimensionales Array mit unterschiedlicher Tiefe pro Element von Feld
-
06-07-2019 - |
Frage
i haben, haben eine Reihe von Complexe Art bekam meine Navigation zu speichern (was soll danach vom Anwender geändert werden). Ich möchte nicht, das Skript haben, nur mit 3 Ebenen der Tiefe arbeiten, damit ich für eine schöne und gute Art und Weise suche diese Anordnung durch das Positionsfeld zu sortieren.
$nav[1]=array(
'name'=>'home',
'position'=>'2',
children=>array(
[1]=array(
'name'=>'page2',
position=>'3'),
[2]=array(
'name'=>'page3',
'position'=>'1'),
[3]=array(
'name'=>'page4',
'position'=>'2')
)
$nav[2]=array(
'name'=>'Second level 1',
'position'=>'1'
);
Ich hoffe, jemand kann mir helfen, vielen Dank für das Problem zu denken.
Lösung
sortieren rekursiv jedes children
Array. Zum Beispiel:
function cmp($a, $b)
{
$ap = intval($a['position']);
$bp = intval($b['position']);
if ($ap == $bp) {
return 0;
}
return ($ap < $bp) ? -1 : 1;
}
function sort_menu(&$item)
{
if ($item['children']) {
foreach ($item['children'] as &$child) {
sort_menu($child);
}
usort($item['children'], "cmp");
}
}
$tmp = array('children' => $nav);
sort_menu($tmp);
$nav = $tmp['children'];
Andere Tipps
Hier ist ein Beispiel für usort.
function yourSortFunction($a, $b)
{
if ($a['position'] == $b['position']) {
return 0;
}
return ($a['position'] < $b['position']) ? -1 : 1;
}
usort($nav, "yourSortFunction");'
Sie können es in Ihrem $ nav Array in Rekursion rufen in anderer Funktion.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow