Сгенерировать <ul> стиль, содержащий ярлык

Я нашел различные решения для создания панировочных сухарей, но все они используют элементы, но моя текущая папка находится в неупорядоченном стиле списка.

Вот что я сделал до сих пор:

<div class="breadcrumb">
<ul>
<?php $seocrumbs = array_pop($breadcrumbs); ?>
<?php foreach($breadcrumbs as $idx=>$seocrumb) { ?>
<li>
<div <?php echo $idx == 0 ? '' : 'itemprop="child"'; ?> itemscope itemtype="http://data-vocabulary.org/Breadcrumb">
    <a href="<?php echo $seocrumb['url'];?>" itemprop="url">
      <span itemprop="title"><?php echo $seocrumb['text'];?></span>
    </a>
</div>    
</li>
<?php }?>
<?php 
//remove link from last item
echo $seocrumb['separator'];?> <li id="lastitem"><?php echo $seocrumbs['text']; ?></li>
</ul>    
</div>    

Проблема с этим кодом заключается в том, что он генерирует отдельные панировочные сухари, а не материнский ключ и дочерние элементы.

<div class="breadcrumb">
<ul>
<li>
<div  itemscope itemtype="http://data-vocabulary.org/Breadcrumb">
    <a href="" itemprop="url">
      <span itemprop="title">Index</span>
    </a>
</div>    
</li>
<li>
<div itemprop="child" itemscope itemtype="http://data-vocabulary.org/Breadcrumb">
    <a href="" itemprop="url">
      <span itemprop="title">Category2</span>
    </a>
</div>    
</li>
 <li id="lastitem">Plášte 27.5&quot;</li>
</ul>    
</div> 

Ответ 1

Предполагая, что у вас есть какие-то тестовые массивы, похожие на это:

$array1 = array ( "url"=>"http://example.com", "text"=>"Parent","separator"=>" ");
$array2 = array ( "url"=>"http://example.com", "text"=>"Child","separator"=>" ");
$breadcrumbs = array ($array1,$array2);

Я изменил ваш код следующим образом:

$output = "<div class='breadcrumb'><ul><li>";
$itemType = "itemtype='http://data-vocabulary.org/Breadcrumb'";
foreach ($breadcrumbs as $key=>$value) {
    if ($key != 0) {
        $itemProp = "itemprop='child'";
        $output .= "<li>";
    } else {
        $itemProp = '';
    }
    $output .= "<div $itemProp itemscope $itemType>";
    $output .= "  <a href='{$value['url']}' itemprop='url'>";
    $output .= "    <span itemprop='title'>";
    $output .= "      {$value['text']}";
    $output .= "    </span>";
    $output .= "  </a>";
    $output .= "</div>";
    if ($key != 0) {
        $output .= "</li>";
    } else {
        $output .= "<ul>";
    }
}
$output .= '</ul></li></ul></div>';
echo $output;

Что дает

<div class='breadcrumb'>
  <ul>
    <li>
      <div  itemscope itemtype='http://data-vocabulary.org/Breadcrumb'>
        <a href='http://example.com' itemprop='url'>
          <span itemprop='title'>Parent</span>
        </a>
      </div>
      <ul>
        <li>
          <div itemprop='child' itemscope itemtype='http://data-vocabulary.org/Breadcrumb'>
            <a href='http://example.com' itemprop='url'>
              <span itemprop='title'>Child</span>
            </a>
          </div>
        </li>
      </ul>
    </li>
  </ul>
</div>

Я делаю некоторые предположения о вашем форматировании стартового массива, но это должен быть работоспособный формат для вас, чтобы настроить его и удовлетворить ваши потребности.

Ответ 2

Цикл foreach будет генерировать 1-мерную цепочку маршрутов. Если вы хотите

<ul>
<li>Category 1
     <ul>
     <li>item 1</li>
     <li>item 2</li>
     </ul>
</li>
<li>Category 2</li>
</ul>

Вам понадобятся две петли foreach, 1 для каждой категории и 1 для каждой клавиши.

<ul>
<?php
foreach ($categories as $c_idx=>$c_value){

     echo "<li>$c_value<ul>";

     foreach ($items as $i_idx=>$i_value){
         echo "<li>$i_value</li>"
     }
     echo "</ul>";
     echo "</li>"

}
?>
</ul>