PHP嵌套循环,如何


php nested loop, how to?

阅读了一些关于这个的文档,但是我似乎不能得到正确的。

这是我的数据库表TabContent:http://www.mauricederegt.nl/dev/mahjong/tabtest2.php

现在我想创建一个嵌套循环,这样结果将是:

<div id="[TabId here]" class="tab_content"> 
     <ul class="columns"> 
         <li>[LayoutName here, all belonging to the TabId]</li>
     </ul>
</div>

因为这个表有3个TabId,这个Div应该循环3次。但是怎么做呢?

编辑:我现在的代码:

<?php 
$result = mysql_query("SELECT * FROM TabContent");
$assoc_array[tab_id] = array($row1, $row2, $row3);
foreach ($array as $k => $v) {
   echo'<div id="'.$k.'" class="tab_content">
     <ul class="columns">';
     foreach ($v as $data) {
       echo'<li>'.$data['LayoutName'].'</li>';
     }
    echo' </ul>
   </div>';
} ?>

首先你必须用TAB id分隔你的数据,也许创建一个数据结构像。

推出

伪代码:

$assoc_array[tab_id] = array($row1, $row2, $row3);

一旦你有了这样的结构你就可以很容易地进行循环

foreach ($array as $k => $v) {
   <div id="$k" class="tab_content">
     <ul class="columns">
     foreach ($v as $data) {
       <li>$data['LayoutName']</li>
     }
     </ul>
   </div>
}

我觉得你应该从一个好的php教程开始。这是关于php的一个非常基本的问题。可以从简单教程开始,或者找一本好书,比如《Php入门》

如果您不能在初始值的tabid上分割数据,您可以使用以下示例

        class HtmlUlGenerator{
    private $_layoutNames=array();
    public function addLayoutName($layoutName){
        $this->_layoutNames[]=$layoutName;
    }
    public function __toString(){
     $retStr="<ul class='"columns'">";
     foreach ($this->_layoutNames as $name){
        $retStr.="<li>$name</li>";
     }
     return $retStr."</ul>";
    }
}
class TabIdDispatcher{
    private $_uls=array();
    public function addRow($row){
        $this->getUlbyTabId($row['TabId'])->addLayoutName($row['LayoutName']);
    }
    /**
     * @return HtmlUlGenerator 
     */
    private function getUlbyTabId($TabId){
        if (!key_exists($TabId, $this->_uls))
             $this->_uls[$TabId]=new HtmlUlGenerator();
         return $this->_uls[$TabId];
    }
    public function addTable($tableRows){
        foreach ($tableRows as $row){
            $this->addRow($row);
        }
    }
    public function __toString(){
        $retStr="";
        foreach ($this->_uls as $key=>$ul){
            $retStr.="<div id='"$key'" class='"tab_content'"> ".$ul."</div>";
        }
        return $retStr;
    }
}

使用它:

$table=array(array("TabId"=>1, "LayoutName"=>"g"),array("TabId"=>1, "LayoutName"=>"ffg"),array("TabId"=>1, "LayoutName"=>"gfg"),
array("TabId"=>2, "LayoutName"=>"g"),array("TabId"=>2, "LayoutName"=>"ffg"),array("TabId"=>2, "LayoutName"=>"gfg"),
array("TabId"=>3, "LayoutName"=>"g"),array("TabId"=>3, "LayoutName"=>"ffg"),array("TabId"=>3, "LayoutName"=>"gfg")) ; 
$obj=new TabIdDispatcher();
$obj->addTable($table);
echo $obj;