PHP: صفيف ترتيب متعددة الأبعاد مع عمق مختلفة لكل عنصر من الميدان
-
06-07-2019 - |
سؤال
ولقد حصلت على مجموعة من النوع المركب لتخزين الملاحة الخاصة بي (التي من المفترض أن يتم تغييرها من قبل المستخدم بعد ذلك). أنا لا أريد أن يكون السيناريو تعمل فقط مع 3 مستويات من العمق حتى أنا أبحث عن طريقة لطيفة وجيدة لفرز هذه المجموعة حسب الحقل الموقف.
$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'
);
وآمل شخص يمكن أن تساعدني، وذلك بفضل للتفكير في المشكلة.
المحلول
وفرز كل مجموعة children
متكرر. على سبيل المثال:
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'];
نصائح أخرى
وهنا مثال usort.
function yourSortFunction($a, $b)
{
if ($a['position'] == $b['position']) {
return 0;
}
return ($a['position'] < $b['position']) ? -1 : 1;
}
usort($nav, "yourSortFunction");'
ويمكنك تسميتها في حياتك $ الملاحة مجموعة في العودية في وظيفة أخرى.
لا تنتمي إلى StackOverflow