<?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>
. Я хочу, чтобы ключ $ получил число, и как получить?
Это связано с тем, что структуры simpleXML не являются нормальными массивами, но итераторами, у которых нет индекса массива.
Я не знаю другого решения, кроме как отслеживать вручную с помощью переменной:
$index = 0; $xml = simplexml_load_file('post.xml'); foreach($xml->item as $item ) { .... $index++; }
Вы можете использовать SimpleXMLElement::xpath
для возврата массива элементов <item>
, а затем получить доступ к ключам массива по SimpleXMLElement::xpath
.
foreach ($xml->xpath('/items/item') as $key => $item)
AFAIK с форматом heredocs, вам нужно обернуть переменные в фигурные скобки:
<a href="#slide-{$key}"> <h3>{$item->title}</h3> </a>
Heredoc
может попробовать
<a href="#slide-{$key}">
Вы можете использовать цикл 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; }