<?xml version="1.0" encoding="utf-8"?>
<items>
<item>
<title>This is title1</title>
<desc>This is desc1</desc>
<image></image>
<tudou></tudou>
</item>
<item>
<title>This is title2</title>
<desc>This is desc2</desc>
<tudou>55362137</tudou>
</item>
<item>
<title>This is title3</title>
<desc>This is desc4</desc>
</item>
</items>
这是我的PHP代码:
<div class="nav">
<ul>
<?php
$xml = simplexml_load_file('post.xml');
//print_r($xml);
foreach($xml->item as $key=>$item )
{
echo <<<HTML
<li>
<div class="published">
<span class="day">13</span>
Sep 2010
</div>
<div class="summary">
<a href="#slide-$key">
<h3>$item->title</h3>
</a>
</div>
</li>
HTML;
}
?>
</ul>
</div>
在php渲染页面后,<a href="#slide-$key">
返回<a href=#slide-item>
。
我想要$ key获取其中的数量,
那怎么弄?
答案 0 :(得分:6)
这是因为simpleXML结构不是普通数组,而是没有数组索引的迭代器。
除了使用变量手动跟踪之外,我不知道任何其他解决方案:
$index = 0;
$xml = simplexml_load_file('post.xml');
foreach($xml->item as $item )
{
....
$index++;
}
答案 1 :(得分:5)
您可以使用SimpleXMLElement::xpath
返回<item>
元素的数组,然后根据需要访问数组的键。
foreach ($xml->xpath('/items/item') as $key => $item)
答案 2 :(得分:0)
使用heredocs格式的AFAIK,你需要用大括号包装变量:
<a href="#slide-{$key}">
<h3>{$item->title}</h3>
</a>
答案 3 :(得分:0)
您可以使用for
循环代替foreach
,如下所示:
$item = $xml->item;
$howMany = count($item);
for($i = 0; $i < $howMany; $i++){
echo <<<HTML
<li>
<div class="published">
<span class="day">13</span>
Sep 2010
</div>
<div class="summary">
<a href="#slide-$i">
<h3>$item->title</h3>
</a>
</div>
</li>
HTML;
}
答案 4 :(得分:0)