【问题标题】:How to display select multiple drop down from using array in php?如何在php中使用数组显示选择多个下拉列表?
【发布时间】:2016-08-10 14:43:53
【问题描述】:

我想像父母一样下拉,孩子意味着使用引导 CSS 的多级任务。 我尝试了下面的一个,但我得到了孩子的所有课程名称。我想下拉

Linux --Linux基础

CSS --CSS基础

下面是我的代码:

<ul class="sub-menu" style="border-right: 2px solid #012340;">
    <?php foreach($outContentArrResults AS $courseName=> $valArrMenu){ ?>
        <li class="menu-item-has-children">
          <a href="#"><?php echo isset($valArrMenu[0]) ? $valArrMenu[0]:'';?  ></a>

            <ul class="sub-menu" style="border-right: 2px solid #012340;border-left: 2px solid #012340;">
            <?php for($i=0; $i<count($valArrMenu['slug']); $i++){?>
                <li>
                   <a href="<?php echo $config['LIVE_URL'];?>courses/<?php isset($valArrMenu['slug'][$i]) ? $valArrMenu['slug'][$i]:'';?>"><?php echo isset($valArrMenu[$i]) ? $valArrMenu[$i]:'';?></a>
                </li>
            <?php } ?>
            </ul>
        </li>
    <?php } ?>
    </ul>

下面是我的数组值:

         Array
      (
              [mainCourse] => Array
      (
        [0] => linux
        [slug] => Array
             (  
                [0] => linux
                [1] => linux-basics
                [2] => first-steps
                [3] => last
                [4] => sdd
                [5] => css
                [6] => css-basics
                [7] => css-introduction
                [8] => linux-sub
                [9] => test-sub-sub-linux
            )

        [1] => linux Basics
        [2] => first steps
        [3] => last
        [4] => sdd
        [5] => css
        [6] => css Basics
        [7] => css Introduction
        [8] => linux sub
        [9] => test sub sub linux
    )

)
$arrCourses = $this->objWsCoursesModel->getMainMenuCourses();
        //print_r($arrCourses);
        $outResults = array();
        for($i=0; $i<count($arrCourses); $i++){
            $courseName = isset($arrCourses[$i]['course_name']) ? $arrCourses[$i]['course_name'] : '';
            $outResults['mainCourse'][] = $courseName;
            $outResults['mainCourse']['slug'][] = isset($arrCourses[$i]['course_slug_name']) ? $arrCourses[$i]['course_slug_name'] : '';
        }

【问题讨论】:

  • 建议在同一个数组中传递 slug 和课程名称
  • 是的,我保留了上面的代码
  • 在第一个 foreach 之前添加 $outContentArrResults=$outContentArrResults['mainCourse']; 。 $valArrMenu[0] 中不需要 [0]
  • k 我替换了你的代码,但我在一个下拉列表中得到了父母和孩子。我保留了上面的图片。我需要什么
  • 是的 @munjal 的方法是正确的,你需要一些方法来判断哪个 slug 属于哪个课程

标签: javascript php jquery html css


【解决方案1】:

您正在制作一个很难实现的非常复杂的数组;)

试试这个数组:

$arrCourses = $this->objWsCoursesModel->getMainMenuCourses();
$outResults = array();
for($i=0; $i<count($arrCourses); $i++){
    $courseName = isset($arrCourses[$i]['course_name']) ?    $arrCourses[$i]['course_name'] : '';
    $outResults['mainCourse'][$courseName][] = isset($arrCourses[$i]['course_slug_name']) ? $arrCourses[$i]['course_slug_name'] : '';;
}

试试这段代码。这是一种粗略的代码。我不确定任何语法错误,但我认为它会像这样工作:

<ul>
<?php foreach($outContentArrResults AS $courseName=> $valArrMenu){ ?>
<li class="menu-item-has-children">
    <a href="#"><?php echo $courseName ?></a>
    <ul class="sub-menu" style="border-right: 2px solid #012340;border-left: 2px solid #012340;">
        <?php for($valArrMenu as $row){?>
        <li>
            <a href="<?php echo $config['LIVE_URL'];?>courses/<?php isset($valArrMenu['slug'][$i]) ? $valArrMenu['slug'][$i]:'';?>"><?php echo isset($valArrMenu[$i]) ? $valArrMenu[$i]:'';?></a>
        </li>
        <?php } ?>
    </ul>
</li>
<?php } ?>
</ul>

【讨论】:

    【解决方案2】:

    您可以尝试这样,它以数组格式返回值。我将此功能用于项目类别树,

       function categoryDropDown($categoryArray, $parentId, $level, $options)
    {
        $level++;
        foreach ($categoryArray  as  $array)
        {
            if($array['parentId'] == $parentId)
            {
                $opt = $array['name'] ;
                $categoryLevel = $level -1;
                $options[$array['id']] =  array("id"=> $array['id'], "categoryName"=>"$opt","level" => "$categoryLevel", "status" => $array['status']);
                $newParent = $array['id'];
                $options = categoryDropDown($categoryArray, $newParent, $level , $options);
            }
        }
        return $options;
    }
    

    ----输出----

        $options= categoryDropDown();      //now it will converted into an Array.
    

    所以你可以打印这样的选项

      <?php
        foreach($options as $value)
        {
        ?>
    
        <option value="<?php echo $value['id']; ?>"> <?echo $value['categoryName']; ?> </option>
    
        //Which is similar to <option value="option name/id">Option 1</option>
    
        <?php
        }
        ?>
    

    数组输出如下(这里索引是我数据库中的主键)

    Array
    (
        [1] => Array
            (
                [id] => 1
                [categoryName] => Electronics
                [level] => 0
                [status] => d
            )
    
        [3] => Array
            (
                [id] => 3
                [categoryName] => Laptops
                [level] => 1
                [status] => a
            )
    
        [6] => Array
            (
                [id] => 6
                [categoryName] => Laptop Accessories
                [level] => 2
                [status] => a
            )
    
        [2] => Array
            (
                [id] => 2
                [categoryName] => Mobile
                [level] => 1
                [status] => a
            )
    
        [5] => Array
            (
                [id] => 5
                [categoryName] => Mobile Accessories
                [level] => 2
                [status] => d
            )
    
        [4] => Array
            (
                [id] => 4
                [categoryName] => Tablet
                [level] => 1
                [status] => a
            )
    
        [12] => Array
            (
                [id] => 12
                [categoryName] => Fashion
                [level] => 0
                [status] => a
            )
    
        [13] => Array
            (
                [id] => 13
                [categoryName] => Men
                [level] => 1
                [status] => a
            )
    
        [15] => Array
            (
                [id] => 15
                [categoryName] => Jeans
                [level] => 2
                [status] => a
            )
    
        [14] => Array
            (
                [id] => 14
                [categoryName] => Women
                [level] => 1
                [status] => a
            )
    
        [16] => Array
            (
                [id] => 16
                [categoryName] => Jeans
                [level] => 2
                [status] => a
            )
    
        [11] => Array
            (
                [id] => 11
                [categoryName] => Main Category 2
                [level] => 0
                [status] => a
            )
    
        [33] => Array
            (
                [id] => 33
                [categoryName] => temp
                [level] => 0
                [status] => a
            )
    
    )
    

    您也可以参考Simple recursive tree in PHP / MySQL

    【讨论】:

    • 你也可以参考类似这个栈的例子link
    【解决方案3】:

    是的,munjal 的解决方案是正确的。而且你正在制作非常复杂的数组结构。 如果你擅长 jquery 和 json 解析而不是简单, 在页面加载调用 js 函数,您可以在其中为菜单树创建 json 数组。 并且可以从 db 轻松管理。

    【讨论】:

      【解决方案4】:

      所以这是我对问题的编辑,不确定我是否正确解释了问题:

      $config['LIVE_URL'] = 'https://example.com/'
      $arr_courses = $this->objWsCoursesModel->getMainMenuCourses();
      $menu_data = [];
      for ($i = 0; $i < count($arr_courses); $i++)
      {
          $course_name = isset($arr_courses[$i]['course_name']) ? $arr_courses[$i]['course_name'] : '';
          $menu_data['mainCourse'][$course_name]['title'][$i] = $course_name;
          $menu_data['mainCourse'][$course_name]['slug'][$i] = isset($arr_courses[$i]['course_slug_name']) ? $arr_courses[$i]['course_slug_name'] : '';
      }
      // $menu_data should look something like this
      $menu_data = [
          'linux' => [
              'title' => [
                  'linux Basics',
                  'first steps',
                  'last',
                  'sdd',
                  'linux sub',
                  'test sub sub linux',
              ],
              'slug' => [
                  'linux-basics',
                  'first-steps',
                  'last',
                  'sdd',
                  'linux-sub',
                  'test-sub-sub-linux',
              ],
          ],
          'css' => [
              'title' => [
                  'css',
                  'css Basics',
                  'css Introduction',
              ],
              'slug' => [
                  'css',
                  'css-basics',
                  'css-introduction',
              ],
          ]
      ];
      ?>
      <ul class="sub-menu">
          <?php foreach($menu_data as $course_name => $data): ?>
              <li class="menu-item-has-children">
                  <a href="#"><?php echo $course_name; ?></a>
      
                  <ul class="sub-menu">                
                      <?php for ($i = 0; $i < count($data['slug']); $i++): ?>
                          <li>
                              <a href="<?php echo $config['LIVE_URL'];?>courses/<?php echo isset($data['slug'][$i]) ? $data['slug'][$i]:'';?>"><?php echo isset($data['title'][$i]) ? $data['title'][$i]:'';?></a>
                          </li>
                      <?php endfor; ?>
                  </ul>
              </li>
          <?php endforeach; ?>
      </ul>
      

      哪些输出:

      linux                          (href="#")
          linux Basics               (href=https://example.com/courses/linux-basics)
          first steps                (...)
          last
          sdd
          linux sub
          test sub sub linux
      css                            (href ="#")
          css                        (href=https://example.com/courses/css)
          css Basics                 (...)
          css Introduction
      

      从这里你可以添加css来正确地设置样式,这应该不是太大的问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-11
        • 1970-01-01
        • 1970-01-01
        • 2020-03-06
        • 1970-01-01
        • 2013-01-26
        相关资源
        最近更新 更多