关于PHP 中while嵌套循环问题,求解决

想实现这样的功能
产品类别一
产品1
产品2
产品类别二
产品1
产品2
结果是这样
产品类别一
产品1
产品2
产品类别二
产品1 (产品类别一)
产品2 (产品类别一)

数据库

PHP处理部分

public function index(){

//我这里用的thinkPHP框架,不知道你是原生还是什么,就简单说一下思路。

$tb_type = M("Type");

$tb_product = M("Products");//这里我是实例化我的数据表,说通俗点就是连接数据库,指定某个表

$types = $tb_type->select();   //这里是在我的products表中进行select查询,而且得到的$types是一个二维数组

foreach($types as $key=>$type){  //这里foreache循环遍历$types,为了取到$type得id号,以此作为条件去产品信息表中进行查询

$where["typeid"] = $type["typeid"];   //这里是where条件,如果是原生的就相当于$where="where typeid = ".$type["id"];

$products = $tb_product->where($where)->select();   //这个sql语句转换为原生是$sql = "select * from tb_products where typeid=".$value['typeid'];

$types[$key]["products"] = $products;//出现你那种情况的主要原因是数组的重构这里,我把得到的产品信息的二维数组与先得到的类别信息的数组进行组合

                                     //因为$types是一个二维数组,键值默认为0  1  2   3内部数组的键值是数据库字段的值,这里我将紧挨着数据库

                                     //字段的值给内部的一维数组添加一个除了数据库字段的值之外的products键,是为了你能够顺利的循环输出在模板页面

}

$this->assign("info",$types);

$this->display();

}





最终的结果

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-09-20
数据库字段是咋样的?
function get_goods_by_cat($cat){
//$sql="select g from cg where cat=$cat";
//查询自己写
return array("商品1","商品2");
}
function get_cat_by_goods($g){
//$sql="select cat from cg where g=$g";
//查询自己写
return array("分类1","分类2");
}
function get_all_category(){
//$sql="select distinct cat from cg";
//查询自己写
return array("分类1", "分类2");
}
$categorys = get_all_category();
$i = 0;
foreach($categorys as $cat){
echo $cat;
echo "<br>";
$goods = get_goods_by_cat($cat);
foreach($goods as $g){
echo $g;
if($i > 0){
$c_by_g = get_cat_by_goods($g);
echo '(' . $c_by_g[0] . ')';
}
echo "<br>";
$i++;
}
}
第2个回答  2014-09-20
这些数据是从数据库里查询出来的么?追问

当然是了

追答

while循环里嵌套 for循环
"产品类别一","category2"=>"产品类别二");
$goods=array("category1"=>array("商品一","商品二"),"category2"=>array("商品三","商品四"));
$count=count($cate);
$x=1;
while($x";
foreach($goods['category'.$x] as $g){
echo $g;
echo "";
}

$x++;
continue;
}
unset($goods['category1']);
?>
这只是一个思路

本回答被网友采纳

php中的do与while问题
不是并列关系 而是被 if ( $VIEW_TYPE == "2" ){}包含在内了 ———解决办法 else if ( $VIEW_TYPE == "3" ){ MODULE_STR_HIDDEN .= $MODULE_ID.",";} 这一句 放到 while ( 0 );} 的后面就可以了...———完整代码———{ MODULE_ID = $ROW['MODULE_ID'];MODULE_POS =...

while循环里包含一个switch,break只能跳出switch,怎么做可以直接从sw...
在break前面加一句话,让循环满足跳while的条件。例如:while(i<100){ ...switch(a){ ...case n: ...;i=100;break; \/\/这里多一句i=100,就是改变循环的条件 ...} if(i==100) \/\/要是switch后面没有循环体语句,就不要这个判断了,能直接跳出了 break; \/\/要是有还要语句,不想再执行...

关于thinkPHP volist 嵌套循环的问题
以上代码序号列不分页的情况下显示正常分页的话每一列序号都会从1开始,如果不想如此可在查询中加入序号,查询代码修改如下不:m = M()->table($topListSql." a, (select @rowNO := 0) b")->field("a.*,(@rowNO := @rowNo+1) AS rowNo");

php中两个 foreach 嵌套,第一层的值不循环 怎么办?
代码本身没看到啥问题,估计是没数据,你改成这样试试:category = pdo_get($this->tablename, array('username' => $username, 'status' => '1'));$tablegrade = pdo_getall($this->tableclass, array('pid' => $category['id'], 'type' => 1));foreach ($tablegrade as $v) {...

php程序,我想输出菜单和其下的分菜单。用的是循环输出,怎么不行,需 ...
){ echo $row['上级菜单名'];\/\/输出下级菜单 sql="selet * from 下级菜单 where 属于 = $row['id']"; 这里的id是上级菜单id res2=my_query($sql);while($row2=mysql_fetch_array($res2)){ echo $row2['下级菜单名'];} } 不知道是不是你说的那个意思,就是做个嵌套循环 ...

php中 break 这个关键字如何使用?
在嵌套循环或多重switch结构中可以跳出几层的意思,默认是break 1,1可以不写。例如:foreach($arr as $v){ foreach($v as $_v){ if($_v=='a') break 2;} } 这个是二重的foreach遍历,当元素值为a的时候跳出2层遍历,也就是说即使还有数据没有遍历到,那也不再进行foreach遍历了。注...

PHP关于通过递归函数显示所有分类的问题
首先函数不能像你这样封装,而且没必要使用递归,循环就可以了(当然函数的自我嵌套循环就是递归算法),我的代码如下:sql = "SELECT * FROM `dangan_class` WHERE f_id = 1"; \/\/ 这里的f_id可以用变量,我只是演示,所以就填写一个具体的值\/\/ 获取结果集$result = mysql_query($sql);\/\/ 用...

php中如何换行
是HTML代码,\\n是ASCII码,浏览器解析的是HTML码,不是ASCII码,你用\\n后,浏览器看不到换行,但你查看页面的源文件,你可以看到代码原来有\\n的地方会出现换行,就是因为\\n可以在文本文件中看到,但却是HTML显示换行,呵呵

请问PHP的条件语句是什么格式?
Loop Until Check = False ' 立即终止外层循环。Do...Loop 语句 当条件为 True 时或条件变为 True 之前重复执行某语句块。Do [{While | Until} condition][statements][Exit Do][statements]Loop 也可以使用下面的语法:Do [statements][Exit Do][statements]Loop [{While | Until} condition...

PHP关于通过递归函数显示所有分类的问题
<?php function zilei($fid,$level){ sql="select id,name from dangan_class where f_id=$fid";query=mysql_query($sql);while(list($id,$name)=mysql_fetch_array($query)){ echo str_repeat("==",$level),$name,"删除\\n";zilei($id,$level+1);} mysql_free_result($query);} ...

相似回答