2013-04-05 1 views
1

Я делаю систему таксономии. Я уже создал рекурсивную функцию, а также функцию для отображения моих категорий в списке (<ul>). Все отлично работает со списком, каждый дочерний элемент перемещается вправо ... и т. Д.Вложенная опция в списке

Но теперь мне нужно сделать то же самое с <select>. Вот то, что я сделал до сих пор:

private function _toHtml(&$list, $parent=-1, $pass = 0){ 
    $foundSome = false; 
    for($i=0,$c=count($list);$i<$c;$i++){ 
     $delay = ''; 
     if($list[$i]['parent_id']==$parent){ 
      if($foundSome==false){ 
       $delay .= str_repeat("--", $pass); 
       $foundSome = true; 
      }  
      echo '<option value="'. $list[$i]['id'] .'">'. $delay . $list[$i]['name'] .'</option>'; 
      $this->_toHtml($list,$list[$i]['id'],$pass+1); 
     } 
    } 
} 

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

Cinema 
--English (sub cat for Cinema) 
French (also a sub cat for Cinema) 

Когда я рассчитывать на:

Cinema 
--English (sub cat for Cinema) 
--French (also a sub cat for Cinema) 

Любая идея?

Спасибо за вашу помощь

+0

http://dipesharea.wordpress.com/2011/06/03/n-level-category/ –

+0

Сколько уровней у вас есть? Следует ли выбрать родителя? – sectus

ответ

2

Всякий раз, когда вы сталкиваетесь с такими проблемами, получить более прямо вперед и забыть о какой-либо преждевременной оптимизации. Упростите свою функцию, уменьшив вложенность и правильное присвоение имен переменных.

private function _toHtml($list, $parent = -1, $level = 0) 
{ 
    foreach ($list as $entry) { 
     if ($entry['parent_id'] != $parent) { 
      continue; 
     } 
     printf('<option value="%s">%s%s</option>', 
      $entry['id'], 
      str_repeat('--', $level), 
      $entry['name'] 
     ); 
     $this->_toHtml($list, $entry['id'], $level + 1); 
    } 
} 
+0

Вы качаете человека, спасибо, что он отлично работает. Также спасибо за простую версию этого кода. Почему сложно, когда мы можем сделать это просто? Спасибо – lkartono

+0

Спасибо, Это помогло мне оптимизировать мой код! :) –

Смежные вопросы