2012-06-28 94 views
4

我一直在第一次使用json和php第一次在很长一段时间,我已经打了两面墙。PHP foreach迭代json数据

我已经创建了一个JavaScript文件,并使用PHP成功解码了它,现在可以访问数据(一次一个项目),但是在尝试迭代它时碰到了一个障碍,使用所有数据吐出列表项目。

任何帮助,这将不胜感激。

的josn看起来是这样的:

{ 
    "data": [ 
     { 
      "name": "name1", 
      "alt": "name one", 
      "imgUrl": "img/icons/face1.png", 
      "linkUrl": "linkurl" 
     }, 
     { 
      "name": "name2", 
      "alt": "name two", 
      "imgUrl": "img/icons/face2.png", 
      "linkUrl": "linkurl" 
     } 
    ] 
} 

和PHP:

<?php 
$json_url = "js/tiles/jsonfeed.js"; 
$json = file_get_contents($json_url); 
$links = json_decode($json, TRUE); 
?> 
<ul> 
    <li> 
    <a href="<?php echo $links['data'][1]['linkUrl'] ?>"><img scr="<?php echo $links['data'][1]['imgUrl']; ?>" alt="<?php echo $links['data'][1]['alt']; ?>" class="share-icon" /></a> 
    </li> 
</ul> 

现在很明显,这样只会抢在第二阵列插槽的信息,我知道,有一个更有效的方式来编写列表项,而不用跳入和跳出php,这将很快被清除。

我遇到的问题是试图将其包装在foreach循环中,以便为json提要中的每个项目吐出一个列表项目。作为json的新手,并且在一段时间内没有碰到php,我很难正确地格式化循环并获取适当的数据。

有人能帮我让这个工作正常吗?

感谢

回答

3

这应该做的工作:

<?php 
$json_url = "js/tiles/jsonfeed.js"; 
$json = file_get_contents($json_url); 
$links = json_decode($json, TRUE); 
?> 
<ul> 
<?php 
    foreach($links['data'] as $key=>$val){ 
?> 
    <li> 
    <a href="<?php echo $val['linkUrl'] ?>"> 
     <img scr="<?php echo $val['imgUrl']; ?>" alt="<?php echo $val['alt']; ?>" class="share-icon" /> 
    </a> 
    </li> 
<?php 
    } 
?> 
</ul> 
+1

神奇,效果很好。谢谢你的帮助! – nate63

+0

你为什么要把这个变成一个关键的val对? – Wobbles

6

只需将需要的foreach的数据,然后与每个孩子轮流工作:

foreach ($links['data'] AS $d){ 
    echo $d['linkUrl']; 
} 
0

你的foreach循环应该遍历$links['data']像这样的例子:

foreach($links['data'] as $item) { 
    echo $item['linkUrl']; 
}