PHP: Field tarafından elemanı başına Farklı Derinlik Sıralama boyutlu Array

2 Cevap php

i (daha sonra kullanıcı tarafından değiştirilebilir olması gerekiyordu) Gezinmemi saklamak için complexe tür bir dizi var var. Ben bu yüzden pozisyon alan bu diziyi sıralamak için güzel ve iyi bir yol arıyorum script sadece derinliği 3 seviyeleri ile çalışmak zorunda istemiyorum.

$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'
);

Birisi, sorun hakkında düşünmek için teşekkürler bana yardımcı olabilir umuyoruz.

2 Cevap

Sıralama her children dizisi yinelemeli. Örneğin:

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'];

Burada usort bir örnektir.

function yourSortFunction($a, $b)
{
    if ($a['position'] == $b['position']) {
        return 0;
    }
    return ($a['position'] < $b['position']) ? -1 : 1;
}

usort($nav, "yourSortFunction");'

Siz başka bir fonksiyonu özyineleme daki $ nav dizideki arayabilirsiniz.