我想下拉像父,子意味着多层任务使用bootstrap 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'] : '';
}
你正在制作一个非常复杂的数组,这将很难实现;)
试试这个数组:
$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>
您可以这样尝试,它以Array格式返回值。我在Item category Tree
中使用了这个函数 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
}
?>
数组输出如下所示(这里index是来自我的数据库的主键)
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
)
)
你也可以参考PHP/MySQL中的简单递归树
是的,munjal的解决方案是正确的。你也在制作非常复杂的数组结构。如果你擅长jquery和json解析,在页面加载调用js函数,你创建json数组的菜单树。
这是我对问题的编辑,不确定我是否正确解释了问题:
$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样式,这应该不是太大的问题。