получить индекс sub в цикле foreach в simpleXMLElement

<?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> . Я хочу, чтобы ключ $ получил число, и как получить?

Related of "получить индекс sub в цикле foreach в simpleXMLElement"

Это связано с тем, что структуры 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; }