⑴ thinkphp <volist>标签 循环输出表格 怎么动态设定循环次数呢
在使用ThinkPHP的volist标签时,单重循环是比较常用的,但有时候需要用到多重嵌套循环。
方法步骤:
Action代码:
publicfunctionindex(){
$prod=I("get.prod_en");
$id=I("get.id",0,"int");
if($prod==""){
$serviceProct=array();//多重循环遍历的数组
//数据保存在两张表中,这里通过循环初始化$serviceProct数组
$service=M("proct_class")->order("oidASC")->select();
for($i=0;$i<count($service);$i++)
{
array_push($serviceProct,array("srvName"=>$service[$i]["pc_cn"],"proct"=>M("proct")->where("prod_class_id=".$service[$i]["pcid"])->order("oidASC")->select()));
}
//如果要在模板中输出变量,必须在在控制器中把变量传递给模板,系统提供了assign方法对模板变量赋
值,无论何种变量类型都统一使用assign赋值。
$this->assign("serviceProct",$serviceProct);
$this->display();
}else{
if($id>0){
$this->display("detail");
}else{
$this->assign('prod_en',$prod);
$clsList=M("question_class")->order("oidASC")->select();
$this->assign('clsList',$clsList);
$qusList=M("question")->order("oidASC")->select();
$this->assign('qusList',$qusList);
$this->display("list");
}
}
模板代码:
<volistname="serviceProct"id="sp"key="i">
<dlclass="dlistodd">
<dt>{$sp.srvName}</dt>
<volistname="sp.proct"id="pd"key="j">
<dd><ahref="/index.php/question?prod_en={$pd.prod_en}">{$pd.prod_cn}</a></dd>
<ifcondition="$jltcount($sp['proct'])">
<dd>|</dd>
</if>
</volist>
<ifcondition="count($sp['proct'])EQ0">
<dd> </dd>
</if>
</dl>
</volist>
当使用多重嵌套循环时,需要为每一个volist指定key值,通过
<if condition="$j lt count($sp['proct'])">
判断是否为数组中的最后一个元素。
⑵ php中foreach怎么控制循环次数
foreach的对象是一个数组,默认是循环出数组中的所有数据就结束。
如果你只想取出数组中的前几个(控制循环次数),可以加一个变量控制次数;
$i = 0;
$maxnum = 10;
foreach($array as $v) {
echo $v;
if($++ > $maxnum) {
break();
}
}
⑶ 用php写出代码:3,6,7,1,8,2,9,4,5,0按照从小到大的顺序输出数组的值。
这个问题,可以采用经典的冒泡排序。冒泡排序的过程如下:
1.比较相邻的元素。如果第一个比第二个大,就交换顺序。
2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。最后的元素会是最大的数。
3.针对所有的元素重复以上的步骤,除了最后一个。
4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
这个过程在转化成代码方式的思路为:
每次从最开始的一对相邻元素比较,到结尾的一对元素比较完毕,可以看做一个完整的步骤,代码表示如下:
for ($j = 0;$j < count($arr)-1;$j++)// 每一次循环表示一次比较和交换的过程。
{
if ($arr[$j]>$arr[$j+1])
{
$tmp = $arr[$j];
$arr[$j] = $arr[$j+1];
$arr[$j+1] = $tmp;
}
}
2.每次重新开始上一步骤都要比上一步少比较最后一个元素(因为上一步最后一个元素已经最大),这时需要增加一个外层循环来控制每次比较元素的个数。代码如下:
for($i = 0;$i < count($arr);$i++)// 每一次外层循环表示从头到尾执行了一次两两互相比较和交换。
{
for ($j = 0;$j < count($arr)-$i-1;$j ++)// 每一次内层循环表示一次比较和交换的过程。
{
if ($arr[$j]>$arr[$j+1])
{
$tmp = $arr[$j];
$arr[$j] = $arr[$j+1];
$arr[$j+1] = $tmp;
}
}
}
完成过程代码如下:
⑷ php取出多维数组重复的值
$arr = array(
array(
array(
"stocknotifyId" => 1,
"sku" => '13809_BL_37',
"email" => '[email protected]'
),
array(
"stocknotifyId" => 3,
"sku" => '13809_BL_37',
"email" => '[email protected]'
),
array(
"stocknotifyId" => 5,
"sku" => '13809_BL_37',
"email" => '[email protected]'
)
),
array(
array(
"stocknotifyId" => 2,
"sku" => '13809_B_39',
"email" => '[email protected]'
)
),
array(
array(
"stocknotifyId" => 4,
"sku" => '13809_BL_39',
"email" =>'[email protected]'
)
)
);
$re = array();
foreach($arr as $a) {
foreach ($a as $v) {
$tmp_v = $v;
unset($tmp_v['email']);
if(isset($re[$v['email']])) {
$re[$v['email']][] = $tmp_v;
}else{
$re[$v['email']] = array($tmp_v);
}
}
}
print_r($re);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<!-- output -->
Array
(
[[email protected]] => Array
(
[0] => Array
(
[stocknotifyId] => 1
[sku] => 13809_BL_37
)
[1] => Array
(
[stocknotifyId] => 2
[sku] => 13809_B_39
)
)
[[email protected]] => Array
(
[0] => Array
(
[stocknotifyId] => 3
[sku] => 13809_BL_37
)
[1] => Array
(
[stocknotifyId] => 4
[sku] => 13809_BL_39
)
)
[[email protected]] => Array
(
[0] => Array
(
[stocknotifyId] => 5
[sku] => 13809_BL_37
)
)
)
⑸ php如何统计一个数组中相同元素的个数
简单的循环即可,选出重复(出现次数大于等于2)的元素并统计每个重复元素出现的次数:
php中的 array_count_values() 函数可以实现
array_count_values() 函数用于统计数组中所有值出现的次数。
本函数返回一个数组,其元素的键名是原数组的值,键值是该值在原数组中出现的次数。
array_count_values(array)
例如:
<?php
$a=array("Cat","Dog","Horse","Dog");
print_r(array_count_values($a));
?>
输出:
Array ( [Cat] => 1 [Dog] => 2 [Horse] => 1 )
(5)php数组重复次数扩展阅读:
php统计数组元素个数
count():对数组中的元素个数进行统计;
sizeof():和count()具有同样的用途,这两个函数都可以返回数组元素个数,得到一个常规标量变量中的元素个数。
如果传递给这个函数的数组是一个空数组,或者是一个没有经过设定的变量,返回的数组元素个数就是0;
array_count_value():统计每个特定的值在数组$array中出现过的次数;
如:
$array=array(4,5,1,2,3,1,2,1);
$ac=array_count_value($array);
将创建一个名为$ac数组,该数组包括:
关键字 值
4 1
5 1
1 3
2 2
3 1