2015-05-22 2 views
1

Я должен объяснить, почему мой вопрос уникален: мой вопрос уникален, потому что предлагаемые решения работают для первого экземпляра массива, но я хочу знать, как я работаю с ним для следующие массивы. ThxСортировка массивов внутри массива отдельными ключами

Мой PHP массив $ kategorien:

Array 
(
    [0] => Array 
     (
      [order] => 0 
      [id] => 1 
      [name] => Other 
     ) 

    [1] => Array 
     (
      [order] => 1 
      [id] => 5652372018 
      [name] => Templates & Addons 
      [sub] => Array 
       (
        [0] => Array 
         (
          [order] => 1 
          [id] => 13989101018 
          [name] => deutsch 
          [sub] => Array 
           (
            [0] => Array 
             (
              [order] => 0 
              [id] => 16694354018 
              [name] => hübsch 
             ) 

           ) 

         ) 

        [1] => Array 
         (
          [order] => 0 
          [id] => 13989102018 
          [name] => english 
         ) 

       ) 

     ) 

    [2] => Array 
     (
      [order] => 0 
      [id] => 13989097018 
      [name] => Domains 
     ) 

    [3] => Array 
     (
      [order] => 2 
      [id] => 15403616018 
      [name] => Service 
     ) 

) 

можно сортировать этот массив по "порядок" с

function sortiere($a, $b) 
      { 
      return strcmp($a['order'], $b['order']); 
      } 
     usort($kategorien, 'sortiere') 

или

foreach ($kategorien as $key => $row) { 
      $order[$key] = $row['order'];     
     } 
     array_multisort($order, SORT_ASC, $kategorien); 

Обе работы и я получаю

order - 0 
    id - 1 
    name - Other 

    order - 0 
    id - 13989097018 
    name - Domains 

    order - 1 
    id - 5652372018 
    name - Templates & Addons 

      order - 1 
      id - 13989101018 
      name - deutsch 

        order - 0 
        id - 16694354018 
        name - hübsch 

      order - 0 
      id - 13989102018 
      name - english 

    order - 2 
    id - 15403616018 
    name - Service 

Но я не могу сортировать следующие массивы. Мне нужна такая же сортировка по «заказу»:

order - 0 
    id - 1 
    name - Other 

    order - 0 
    id - 13989097018 
    name - Domains 

    order - 1 
    id - 5652372018 
    name - Templates & Addons 

      order - 0   <------------------ 
      id - 13989102018 
      name - english 

      order - 1   <------------------- 
      id - 13989101018 
      name - deutsch 

        order - 0 
        id - 16694354018 
        name - hübsch 

    order - 2 
    id - 15403616018 
    name - Service 

Как я могу использовать рабочие функции для следующих массивов? Спасибо!

+1

возможно дубликат [Как отсортировать массив ассоциативных массивов по значению заданного ключа в PHP?] (Http://stackoverflow.com/questions/1597736/how-to-sort-an -array-of-associative-arrays-by-value-of-a-given-key-in-php) –

+0

Я не ищу ответа на вопрос «как я могу сортировать многомерный массив». Я должен сортировать многомерный массив в многомерном массиве, но не знаю, как это сделать. :-( –

ответ

3

Я бы создал рекурсивную функцию, которая будет сортировать один уровень и повторно называться на следующем уровне, если существует [sub] и так далее.

Вот мое решение, которое будет сортировать весь массив на всех уровнях order значения:

Код:

function sortiere($a, $b) { return strcmp($a['order'], $b['order']); } 
function sort_by_order(&$arr) { 
    usort($arr, 'sortiere'); 
    foreach ($arr as $k => $c) { 
     if (isset($c['sub'])) { 
      sort_by_order($arr[$k]['sub']); 
     } 
    } 
    return; 
} 

Использование:

$arr = Array(
    /* the array with the specific structure as you showed */ 
); 
sort_by_order($arr); 
print_r($arr); 

Demo:

online demo

+0

Спасибо большое! Я вижу и учись, благодарю вас! –

+0

Нет проблем, получайте удовольствие. –

Смежные вопросы