【问题标题】:Nested option in select选择中的嵌套选项
【发布时间】:2013-03-27 08:56:30
【问题描述】:

我正在制作一个分类系统。我已经创建了递归函数以及在列表中显示我的类别的函数 (<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);
        }
    }
}

问题是,这只适用于第一个子元素,其他的根本没有考虑。它看起来基本上是这样的:

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)

有什么想法吗?

感谢您的帮助

【问题讨论】:

标签: php arrays select nested option


【解决方案1】:

当您遇到此类问题时,请更加直截了当,忘记任何过早的优化。通过减少变量的嵌套和正确命名来简化您的函数。

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);
    }
}

【讨论】:

  • 你太棒了,谢谢它完美地工作。还要感谢您提供该代码的简单版本。当我们可以做简单的事情时,为什么要做复杂的事情?谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-20
相关资源
最近更新 更多