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