PHP7-RecursiveArrayIterator尝试使用带有字符串和数组值的多维数组构造下拉菜单

PHP7-RecursiveArrayIterator尝试使用带有字符串和数组值的多维数组构造下拉菜单,php,arrays,sorting,twitter-bootstrap-3,iteration,Php,Arrays,Sorting,Twitter Bootstrap 3,Iteration,PHP7 中级至初级编码器 我已经做了相当彻底的研究,无法找到一个完全适合我的问题的解决方案。我发现非常相似,但只是不同,所以我无法使它的工作 我正试图使用数据库查询的结果在Bootstrap3中构建一个导航栏。结果包括字符串值和数组值。我已经计算出了大部分构造,但是我无法获得要插入的子数组值,也无法将结果正确地显示在下拉菜单中。我正在使用带有->getChildren()的递归ArrayIterator函数筛选出数组并显示->hasChildren()值 问题: 我的下拉列表仅显示单词数组

PHP7

  • 中级至初级编码器
我已经做了相当彻底的研究,无法找到一个完全适合我的问题的解决方案。我发现非常相似,但只是不同,所以我无法使它的工作

我正试图使用数据库查询的结果在Bootstrap3中构建一个导航栏。结果包括字符串值和数组值。我已经计算出了大部分构造,但是我无法获得要插入的子数组值,也无法将结果正确地显示在下拉菜单中。我正在使用带有
->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>&nbsp;&nbsp;'.$btnNm[$i].'&nbsp;&nbsp;<span class="caret">&nbsp;</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>&nbsp;&nbsp;'.$k.'&nbsp;&nbsp;';
         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;
    (这里您在$result
    CUSTOMERS
    中有一个数组)然后<