2014-01-06 6 views
0

Мне нужно создать навигационную систему из файла, созданного сценарием PERL. Эти скрипты анализируют дерево каталогов и генерируют файл, в котором каждая строка представляет собой уровень каталога.Создать навигацию из массива

У меня нет доступа к этому сценарию PERL. Он генерирует что-то вроде этой модели.

Продукты/Manufacturer1/Product1 Продукты/Manufacturer1/Product1/Описание Продукты/Manufacturer1/product2 Продукты/Manufacturer1/Product2/Описание Продукция/Manufacturer2/Product1/ Продукты/Manufacturer2/Product1/Описание

Я строю сценарий, который создает массив как ниже

$array = array(
    array(
     'Products', 
     'Manufacturer1', 
     'Product1' 
    ), 
    array(
     'Products', 
     'Manufacturer1', 
     'Product1', 
     'Description' 
    ), 
    array(
     'Products', 
     'Manufacturer1', 
     'Product2' 
    ), 
    array(
     'Products', 
     'Manufacturer1', 
     'Product2', 
     'Description' 
    ), 
    array(
     'Products', 
     'Manufacturer2', 
     'Product1' 
    ), 
    array(
     'Products', 
     'Manufacturer2', 
     'Product1' 
     'Description' 
    ), 
) 

Какой должна создать HTML, как это:

<ul> 
    <li>Products 
     <ul> 
      <li>Manufacturer1 
       <ul> 
        <li>Product1 
         <ul> 
          <li>Description</li> 
         </ul> 
        </li> 
        <li>Product2 
         <ul> 
          <li>Description</li> 
         </ul> 
        </li> 
       </ul> 
      </li> 
      <li>Manufacturer2 
       <ul> 
        <li>Product1 
         <ul> 
          <li>Description</li> 
         </ul> 
        </li> 
        <li>Product2 
         <ul> 
          <li>Description</li> 
         </ul> 
        </li> 
       </ul> 
      </li> 
     </ul> 
    </li> 
</ul> 

Не могу понять, как его решить.

+0

Вернитесь на шаг - это ужасный массив, с которого вы должны начать. Если вы написали скрипт, который выполняет итерацию рекурсивного дерева - почему вы выводите его как, по существу, плоский список? Можете ли вы показать нам ***, что *** фрагмент кода. – Emissary

ответ

0

Это неприятная структура массива, с которой нужно иметь дело; в идеале нужно иметь ключи легко идентифицировать продукты, производители и т.д. Если предположить, что позиции значения остаются неизменными, вы могли бы сделать что-то вроде:

$products = array(); 
foreach ($array as $v) { 
    if (isset($v[1]) && isset($v[2])) { 
     $products[$v[1]][$v[2]] = isset($v[3]) ? $v[3] : ''; 
    } 
} 

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

<ul> 
    <li>Products 
    <ul> 
     <?php 
     foreach ($products as $k => $v) { 
      ?> 
      <li><?php echo $k ?> 
       <ul> 
       <?php 
       foreach ($v as $k2 => $v2) { 
        ?> 
        <li><?php echo $k2 ?> 
         <ul> 
          <li><?php echo $v2 ?></li> 
         </ul> 
        <?php 
       } 
       ?> 
       </ul> 
      </li> 
      <?php 
     } 
     ?> 
     </ul> 
    </li> 
</ul> 
Смежные вопросы