2013-04-10 4 views
3

У меня есть JSON-файл, который выглядит примерно так:Перебор многомерного массива

{ 
"Pages":{ 
     "/":{ 
      "Name": "Home", 
      "Page": "index.php" 
     }, 

     "/_admin":{ 
      "Name": "Admin", 
      "Page": "_admin/index.php", 

      "Template": "admin", 
      "MobileTemplate": "admin-mobile", 

      "Pages":{ 

       "/settings":{ 
        "Name": "Settings", 
        "Page": "_admin/settings/index.php", 
        "Config": "_admin/settings/config.php", 

        "Pages":{ 

         "/user":{ 
          "Name": "Users", 
          "Page": "_admin/settings/user.php", 
          "Config": "_admin/settings/config.php", 
          "CatchAll": true 
         } 

        } 

       } 
      } 
     }, 

     "/tasdf":{ 
      "Name": "fs", 
      "Page": "index.php" 
     } 
    } 
} 

Я пытаюсь Переберите этот массив (я использовал JSON декодирования, чтобы превратить его в PHP), и для каждого блока «Страницы» я хочу добавить дополнительные данные.

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

Array Loop Starts 
Finds "Pages" 
    -Goes through "/" 
    -No "Pages" - continue 
    - Goees through "/_admin" 
     -Finds "Pages" 
     -Goes through "/settings" 
      -Finds "Pages" 
      -Goes Through "/user" 
      -No Pages Continue 
    - Goes through "/tasdf" 
    - No "Pages" - continue 
End Loop 

Everytime он проходит через часть, я хочу, чтобы слиться с другим массивом.

Я изо всех сил пытаюсь написать код, чтобы увидеть, как он держит цикл каждый раз, когда он находит слово «Страницы» в качестве ключа. Я много раз пытался, но оставил свой код.

Любая помощь с этим будет замечательной!

+0

вы пытаетесь дать задание нам? –

+0

Нет заданий, его личный проект. Я просто не могу заставить этот многомерный цикл массива работать. – MichaelH

ответ

5

Вы ищете рекурсивную функцию, которая сканирует ваш массив на глубину n. Нечто подобное может работать:

function findPagesInArray($myArray) { 
    foreach($myArray as $index => $element) { 
     // If this is an array, search deeper 
     if(gettype($element) == 'array') { 
      findPagesInArray($element); 
     } 

     // Reached the Pages.. 
     if($index == 'Pages') { 
      // Do your task here 
     } 
    } 
} 

И вы бы сейчас использовать его по телефону findPagesInArray($json_object)

+1

Будет ли это работать? Кажется, что и условие if, и условие elseif будут истинны одновременно (т. Е. Все $-элементы с $ index == 'Pages' являются массивами). Возможно, вам нужно 2 ifs? – James

+0

@ Джеймс хороший момент, исправил его. – FloatingRock

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