PHP: صفيف ترتيب متعددة الأبعاد مع عمق مختلفة لكل عنصر من الميدان

StackOverflow https://stackoverflow.com/questions/1629358

  •  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");'

ويمكنك تسميتها في حياتك $ الملاحة مجموعة في العودية في وظيفة أخرى.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top