2013-04-10 81 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 

每次它經歷的一部分,我希望它與另一個陣列合併。

我正在努力編寫代碼,以便每次發現單詞「Pages」作爲關鍵字時都會繼續循環。我嘗試了很多次,但不停地報廢我的代碼。

任何幫助,這將是偉大的!

+0

你試圖給一個分配給我們使用呢? – 2013-04-10 04:38:26

+0

沒有任務,它是一個個人項目。我無法得到這個多維數組循環的工作。 – MichaelH 2013-04-10 04:39:10

回答

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 2013-04-10 05:18:41

+0

@詹姆斯好點,修復它。 – FloatingRock 2013-04-10 09:02:22