2015-02-02 8 views
0

Я пытаюсь отсортировать этот массив рекурсивно этикетке:Сортировка рекурсивный многомерный массив по конкретным ключевым

Array 
(
    [0] => Array 
     (
      [id] => 6 
      [label] => Bontakt 
      [children] => Array 
       (
       ) 

     ) 

    [1] => Array 
     (
      [id] => 7 
      [label] => Ampressum 
      [children] => Array 
       (
        [0] => Array 
         (
          [id] => 5 
          [children] => Array 
           (
           ) 

          [label] => Bome 
         ) 

        [1] => Array 
         (
          [id] => 8 
          [children] => Array 
           (
           ) 

          [label] => Aome 
         ) 

        [2] => Array 
         (
          [id] => 10 
          [children] => Array 
           (
           ) 

          [label] => Come 
         ) 

       ) 

     ) 

    [2] => Array 
     (
      [id] => 9 
      [label] => Contakt 
      [children] => Array 
       (
       ) 

     ) 

    [3] => Array 
     (
      [id] => 11 
      [label] => Dead 
      [children] => Array 
       (
       ) 

     ) 

) 

Я прочитал несколько вопросов, и я чувствую, что довольно близко, но я не могу выяснить, что не работает:

function sortByAlpha($a, $b) 
{ 
    return strcmp(strtolower($a['label']), strtolower($b['label'])) > 0; 
} 

function alphaSort(&$a) 
{ 
    foreach ($a as $oneJsonSite) 
    { 
     if (count($oneJsonSite["children"]) > 0) alphaSort($oneJsonSite["children"]); 
    } 

    usort($a, 'sortByAlpha'); 
} 


alphaSort($jsonSites); 

выходной ток, как это:

Ampressum 
    Bome 
    Aome 
    Come 
Bontakt 
Contakt 
Dead 

дети элементы не сортируется ...

+0

@MikeBrant Присмотритесь на функции AlphaSort ;-) –

+0

Жаль, что я пропустил это :) –

ответ

1

Проверьте это:

Для того, чтобы иметь возможность напрямую изменять элементы массива в пределах предшествуют $ значения петли с &. В этом случае значение будет присвоено по ссылке. (поднято здесь: http://php.net/manual/en/control-structures.foreach.php)

Вы должны попробовать с этим:

function alphaSort(&$a) 
{ 
    foreach ($a as &$oneJsonSite) 
    { 
     if (count($oneJsonSite["children"]) > 0) alphaSort($oneJsonSite["children"]); 
    } 

    usort($a, 'sortByAlpha'); 
} 
+0

Спасибо, это сработало отлично! Помните, если я отредактирую ваш ответ с помощью рабочего кода? –

+0

Ницца! Вы можете отредактировать его :-) – etalon11