php嵌套循环,怎么样?

时间:2011-12-03 13:47:50

标签: php iteration nested-loops

阅读一些关于此的文档,但我似乎无法做到正确。

这是我的名为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>';
} ?>

3 个答案:

答案 0 :(得分:1)

首先,您必须按标签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>
}

答案 1 :(得分:1)

我觉得你应该从一个很好的PHP教程开始。这是关于php的一个非常基本的问题。也许从A Simple Tutorial开始,或者为自己写一本好书,例如Begining Php

答案 2 :(得分:0)

如果无法在初始标签的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;