PHP7-RecursiveArrayIterator尝试使用带有字符串和数组值的多维数组构造下拉菜单
PHP7PHP7-RecursiveArrayIterator尝试使用带有字符串和数组值的多维数组构造下拉菜单,php,arrays,sorting,twitter-bootstrap-3,iteration,Php,Arrays,Sorting,Twitter Bootstrap 3,Iteration,PHP7 中级至初级编码器 我已经做了相当彻底的研究,无法找到一个完全适合我的问题的解决方案。我发现非常相似,但只是不同,所以我无法使它的工作 我正试图使用数据库查询的结果在Bootstrap3中构建一个导航栏。结果包括字符串值和数组值。我已经计算出了大部分构造,但是我无法获得要插入的子数组值,也无法将结果正确地显示在下拉菜单中。我正在使用带有->getChildren()的递归ArrayIterator函数筛选出数组并显示->hasChildren()值 问题: 我的下拉列表仅显示单词数组
- 中级至初级编码器
->getChildren()
的递归ArrayIterator
函数筛选出数组并显示->hasChildren()
值
问题:
我的下拉列表仅显示单词数组
,它们没有解析数组的值
下拉菜单还将获取所有作为子级的数组值,并将它们放置在两个按钮中,至少我认为这是正在发生的事情
以下是我希望菜单的外观:
我能够为navbar和父元素获得完美的结构,下拉列表可以工作,但是,我在下拉列表中得到了“数组”结果,我还得到了两个数组结果的组合,因为我还没有弄清楚如何过滤出带有子元素的数组,以便将适当的信息解析到适当的数组下拉部分
以下是屏幕截图:
*以下是数组中的DB查询:
此查询中只有两个数组,CUSTOMERS
和CUST\u ROUTE\u DAY
$custRouteDay和$custName是fetch_assoc()结果的while循环中的变量
define("CUST_ROUTE_DAY", $custRouteDay);
define("CUSTOMERS", $custName);
define("NAVBTNS", [
"Customers"=>CUSTOMERS,
"Route Info"=>CUST_ROUTE_DAY,
"Tasks",
"Networking",
"Maps"
]);
下面是来自数据库的结果数组
NAVBTNS = Array ( [Customers] => Array ( [0] => John Banner [1] => Dale
Landry [2] => Bill Childers [3] => Darren Little ) [Route Info] => Array (
[0] => 1 [1] => 3 [2] => 3 [3] => 4 ) Tasks Networking Maps )
基本上有两个功能,一个用于构造导航栏
,另一个用于构造下拉按钮
function construct_navbar_buttons(){
$navbtns = NAVBTNS;
$iterator = new RecursiveArrayIterator($navbtns);
$btns = '<ul class="nav navbar-nav">';
$i = 0;
while ($iterator->valid()) {
if ($iterator->hasChildren()) {
$btnNm = array();
//Get the names for the dropdown (Arrays) which, for the
//arrays will = the $key value and place them into $btnNm[]
foreach(NAVBTNS as $btnName=>$result){
$btnNm[]=$btnName;
$results[]=$result;
}
$btns .= '<li class="dropdown">
<a class="dropdown-toggle" data-toggle="dropdown" href="">
<i class="'.NAVICONS[$i].'">
</i> '.$btnNm[$i].' <span class="caret"> </span>
</a>
<ul class="dropdown-menu dropdown-user">';
//Get the values within the child arrays
foreach($row = $iterator->getChildren() as $key => $btn){
$count = count($row);
for($inc=1;$inc<$count;$inc++){
$btns .= '<li><a href="?p='.$i.'">'.$results[$i].'</a></li>';
}
}
$btns .= '</ul>
</li>';
}else{
foreach($iterator as $num => $value){
if(!is_array($value)){
$btns .= '<li><a href="?p='.$i.'">'.$value.'</a></li>';
}
}
}
$i++;
$iterator->next();
}
$btns .= '</ul>';
return $btns;
}
function construct_navbar(){
$stmt = '
<!--NAV BAR IS TOP FIXED-->
<nav role="navigation" class="'.STYLE["fixed-top"].'">
<div class="container-fluid">
<!-- Brand and toggle get grouped for better mobile display -->
<div class="navbar-header">
<a class="navbar-brand" href="#">Pool Buddy Pro</a>
</div>';
$stmt .= construct_navbar_buttons();
$stmt .= '
<ul class="nav navbar-nav nav-pills navbar-right">
<li><a href="#">Link</a></li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"><i class="glyphicon glyphicon-user"></i> <i class="caret"></i></span></a>
<ul class="dropdown-menu">
<li><a href="#"><i class="glyphicon glyphicon-cog"></i> Edit User Account Info</a></li>
<li><a href="#"><i class="glyphicon glyphicon-search"></i> Search Customers</a></li>
<li><a href="#"><i class="fa fa-eye"></i> View Your Network</a></li>
<li role="separator" class="divider"></li>
<li><a href="#"><i class="glyphicon glyphicon-log-out" aria-hidden="true"></i> Logout</a></li>
<!--<li role="separator" class="divider"></li>
<li><a href="#">One more separated link</a></li>-->
</ul>
</li>
</ul>
</div><!-- /.navbar-collapse -->
</div><!-- /.container-fluid -->
</nav>';
return $stmt;
}
函数构造\导航栏\按钮(){
$navbtns=navbtns;
$iterator=新的递归ArrayIterator($navbtns);
$btns=';
$i=0;
而($iterator->valid()){
如果($iterator->hasChildren()){
$btnNm=数组();
//获取下拉列表(数组)的名称,对于
//数组将=$key值并将它们放入$btnNm[]
foreach(NAVBTNS作为$btnName=>$result){
$btnNm[]=$btnName;
$results[]=$result;
}
$btns.='-
;
//获取子数组中的值
foreach($row=$iterator->getChildren()作为$key=>$btn){
$count=计数($row);
对于($inc=1;$inc$value){
如果(!是_数组($value)){
$BTN.='';
}
}
}
$i++;
$iterator->next();
}
$BTN.='
';
返回$BTN;
}
函数构造_navbar(){
$stmt=$
';
$stmt.=构造导航栏按钮();
$stmt='
-
';
返回$stmt;
}
HTML:
<body>
<div class="row">
<div style="margin-bottom:0px;">
<?php echo construct_navbar(); ?>
</div>
<div style="padding-top:50px;padding-left:0px;" class="row">
<div class="sidebar-nav navbar-collapse col-lg-4">
<div style="box-shadow:1px 0px 4px #999;background-color:#F8F8F8;padding-top:20px !important;" class="col-lg-12 sidebar-nav navbar-collapse">
<?php construct_side_bar_customer_nav(); ?>
</div>
</div>
<div class="col-lg-8">
<div class="heading col-lg-12">
...CONTENT...
</div>
</div>
</div>
</div>
</body>
…内容。。。
非常接近,任何帮助都将不胜感激!请在此重复
- 您有一个带有字符串值或子数组的数组
//this 2 arrays can created just once, content never changes
foreach(NAVBTNS as $btnName=>$result){
$btnNm[]=$btnName;
$results[]=$result;
}
//$iterator=$navbtns
foreach($iterator as $k => $v){//$k holds index or e.g. Customers
//You can use $k here for the <i></i> tag
if(is_array($v)){//go over subarray
$btns .= '<li class="dropdown">....</i> '.$k.' ';
foreach($v as $key => $value){
//do stuff example data: [0] => John Banner
$btns .= '<li><a href="?p='.$key.'">'.$value.'</a></li>';
}
$btns .= "</ul>\n</li>";
} else {//whe have a string value
//do stuff example data: Tasks - key here seems aways a index number
$btns .= '<li><a href="?p='.$k.'">'.$v.'</a></li>';
}
}
//这2个数组只能创建一次,内容永远不会更改
foreach(NAVBTNS作为$btnName=>$result){
$btnNm[]=$btnName;
$results[]=$result;
}
//$iterator=$navbtns
foreach($k=>$v的迭代器){/$k保存索引或例如客户
//您可以在此处使用$k作为标记
如果(是_数组($v)){//遍历子数组
$btns.='......$k.';
foreach($v作为$key=>$value){
//do stuff示例数据:[0]=>John Banner
$BTN.=' ';
}
$BTN.=“\n”;
}else{//whe有字符串值
//do stuff示例数据:任务-这里的键似乎总是一个索引号
$BTN.='';
}
}
不需要更多,因为您永远不会得到数组->子数组->子数组
我在这里获取
?p='.$I.
的逻辑时遇到问题。RecursiveArrayIterator用于尝试筛选哪些条目有子项或没有子项。$行用于查找“hasChildren()的静态编号)'因此,我可以使用该计数将子结果的值放置在下拉列表项中。@justOnUnderMillumns我在父数组中嵌套了两个数组。老实说,我正在尝试使其全部动态创建。因此,如果存在嵌套数组,它将创建结构,然后将适当的值放置在菜单结构中@JustOnUnderMillions$btnNm[]=$btnName
为父级下拉按钮保存名称的值。我将变量传递到foreach循环中,并使用$iI递增它。如果发现了数组的问题,您可以执行“Customers”=>Customers,
但稍后将foreach(NAVBTNS作为$btnName=>$result)
然后$results[]=$result;
(这里您在$resultCUSTOMERS
中有一个数组)然后<