phpforin循环语句
1、循环内拼接sql语句,循环外执行
例如:
//假设这里的$users是一个很大的数组,我们要循环取出其中的值foreach($users as $user){//这部分的sql是我从项目中随便摘抄出来的。主要就是实现拼接sql语句$sql .= " ('{$order_sn}', '{$this->user_id}', '{$deliver_fee}', 0, "
. " '', '', '', "
. " '{$add_time}','{$order_status}', '{$order_amount}', '{$remark}', "
. " '{$pickup_code}', '{$self_pickup}', '{$collect_order_sn}', '{$key}', {$reservation_time}),";
}
//循环中拼接好sql之后,我们在循环外执行$sql = substr($sql, 0, -1);
DB::statement($sql);1234567891011
2、where条件换为where in()
比如我们的where()条件中要使用大规模的数组,那么在语句应该是:
foreach($arr as $v){
DB::table('')->where('id',$v->id);
}123
此时我们可以转变一下:
//先取出条件数组$arr,在直接执行whereIn即可DB::table('')->whereIn('id',$arr);12
注意:如果数据量很大,比如几十万条数据,那么whereIn也会成为代码的瓶颈,这个函数适用于数据量不是很大的情况。
❷ php+mysql循环查询语句,,
楼上的不是很好,查了5次数据库。。。
foreach($uid as $rs){
$uid_all .= isset($uid_all)?','.$rs:$rs;
}
$sql="select uid,username from table where uid in (uid_all)";
❸ PHP的for循环嵌套问题,高手请进(需要讲一些细节)
for循环的执行原理:
for循环的参数有(初始值;判断条件;更新循环变量表达式) 三者均不是必须的,若三者不完整则必须在适当的时候手动调用break命令终止循环,否则循环将一直持续下去成为死循环
执行过程为:
首先判断初始值是否满足判断条件,如满足则开始循环,若不满足则直接跳过循环因此如下的循环是不会被执行的:
for($i=0;$i<0;$i++)
然后执行一次循环体(包裹在for后面大括号里的代码)
使用更新循环变量表达式更新变量
使用判断条件进行判断,若不满足则终止循环,若满足则再次执行循环体
因此如下循环会被执行5次
for($i=0;$i<5;$i++)
for循环嵌套:
for循环嵌套的话将优先执行内循环,再执行外循环,如下:
//外循环开始
for($i=0;$i<10;$i++)
{
//这里是外循环的循环体
for($j=0;$j<20;$j++)//内循环开始
{
//这里是内循环的循环体
}//内循环结束
}//外循环结束
当开始执行循环时,首先执行外循环的循环体(其中包括了内循环),此时$i=0;在此过程中当执行到内循环处时开始执行内循环,$j由0递增到19;执行完20遍内循环后外循环结束,$i++;此时$i=1,再次开始执行外循环。
综上,外循环体共执行10次,内循环体执行20(内循环本身的重复次数)*10(每次外循环均执行20次内循环)=200次
多重嵌套按此方法逐层分析
代码分析:
for($i=1;$i<=9;$i++){
echo$j,'';
for($j=1;$j<=$i;$j++){
}
}
按上述方法进行分析的话,执行步骤如下:
$i=1代入外循环,循环开始
执行echo $j,此时未定义$j,输出Notice: Undefined variable: j in C:wampwwwzhlx3.php on line 3
执行至内循环处,内循环开始,$j=1代入循环
内循环体什么都没做,循环执行1次(最终$j=2;$i=1<$j;内循环终止)
$i++;$i此时等于2;再次开始外循环
echo $j;此时$j的变量还等于2;因此输出2
执行至内循环处,内循环开始,$j重新被初始化为1代入循环
内循环体什么都没做,循环执行2次(最终$j=3;$i=2<$j;内循环终止)
$i++;$i此时等于3;再次开始外循环
echo $j;此时$j的变量还等于3;因此输出3
执行至内循环处,内循环开始,$j重新被初始化为1代入循环
内循环体什么都没做,循环执行3次(最终$j=4;$i=3<$j;内循环终止)
$i++;$i此时等于4;再次开始外循环
。。。。。以此类推
第二段代码和第三段代码与第一段的不同之处仅在于内外循环的输出语句不同,按照此方法分析即可得到输出结果
循环算法是基础算法之一,原理简单但是分析比较麻烦,尤其涉及到嵌套。在刚开始学的时候经常搞不懂这是很正常的。解决的方法就是静下心来,把自己当做是一台速度极慢的计算机,按照for循环的执行过程逐条语句浏览,很快就可以弄明白的,祝你成功!
❹ 详细讲解foreach循环的用法
foreach(char arg in args)//"char"是args里面每个元素的类型,arg就是从args里面提取出的“char”类型的一个元素,in是关键字,args就是你要操作的集合类型数据。其实和for()循环类似,只是不需要记录循环步数,同时,在foreach过程中,args是不允许被改变的。
{
if(arg == ch)
{
//存在
}
else
{
//不存在
}
)
❺ php难题(foreach循环难题)
$db->query("update p_config set values='$values' where name='$name'");
改为
$db->query("update p_config set values=".$values."where name=".$name);
你上面那种写法容易出错 下面的写法比较直观 字符串和变量更容易区分
❻ php,ajax
如果是要使用返回的数据拼写html代码的话,可以使用eval函数遍历返回的数据,然后使用forin进行循环,在forin里面拼写html代码
❼ php中在循环外部如何强制结束循环
不可能。PHP 是单线程的。如果这个线程正在执行一个循环。就只能在循环中做条件判断。不可能有另外的代码同时在运行。。自然也不能通过其它代码中断它。。
如果你一定要这么做,我这里只有一个不是办法的办法。。。在循环里面写一个读取文件。判断这个文件的内容是0还是1。。如果是0则中断。。这样。如果在循环结束之前。有东西把这个文件的内容变成 0 了。那循环也就中断了。。
不过,这样的做法效果非常低。。你也可以改为。判断一个文件是否存在。。如果存在则中断循环并删除这个文件。以便下次可以继续循环。。任意程序只要创建了这个文件就会让循环中断。
❽ php中自定义函数正确的语句是
像数学中的函数一样,y=f(x)是函数基本的表达形式,x可看做是参数,y可看做是返回值,即函数定义就是一个被命名的、独立的代码段,它执行特定的任务,并可能给调用它的程序返回一个值。
自定义函数 函数的声明
在编写程序的过程中,我们会经常碰到某些功能模块在PHP中没有提供系统函数,这样就需要我们自己定义函数,即自定义函数,自定义函数的规则如下:
每个函数的第一行都是函数头,由声明函数的关键字function、函数名和参数列表三部分组成。
每个自定义函数都必须使用function关键字声明。
函数名可以代表整个函数,可以将函数命名为任何名称,只要遵循变量名的命名规则即可。但函数名称必须唯一,且不能与系统函数重名。
声明函数时函数名后面的花括号也是必须有的,在花括号中表明了一组可以接受的参数列表,参数就是声明的变量,然后在调用函数时传递给它值。参数列表可以没有,也可以有—个或多个参数,多个参数使用逗号分隔。
函数体位于函数头后面,用花括号括起来。函数被调用后,执行到retun语句或最外面的花括号后结束,返回到调用的程序。
使用关键字return可以从函数中返回一个值,然后返回到调用程序处继续执行。
- Demo
通过函数名称去调用函数。
如果函数有参数列表,还可以通过函数名后面的圆括号传入对应的值给参数,在函数体中使用参数来改变函数内部代码的执行行为。
如果函数有返回值,当函数执行完毕时就会将return后面的值返回到调用函数的位置处。
- Demo
return语句可以向函数调用者返回函数体中任意执行结果值。
在函数体中如果执行了return语句,它后面的语句就不会被执行。
- Demo
<?php
/* 将使用双层for循环输出表格的代码声明为函数,函数名为table */
functiontable(){
echo"<table align='center' border='1' width='600'>";
for(out=0;out<10;out++){
bgcolor=out%2==0?"red":"blue";//各行换背景色
echo"<tr bgcolor=".bgcolor.">";
for(in=0;in<10;in++){
echo"<td>".(out*10+in)."</td>";
}
echo"</tr>";
}
echo"</table>";
}
?>
函数的调用
不管是自定义的函数还是系统函数,如果函数不被调用,就不会执行。函数被调用后开始执行函数体中的代码,执行完毕返回到调用的位置继续向下执行。调用规则如下:
<?php
/* 将使用双层for循环输出表格的代码声明为函数,函数名为table */
functiontable(){
echo"<table align='center' border='1' width='600'>";
for(out=0;out<10;out++){
bgcolor=out%2==0?"red":"blue";//各行换背景色
echo"<tr bgcolor=".bgcolor.">";
for(in=0;in<10;in++){
echo"<td>".(out*10+in)."</td>";
}
echo"</tr>";
}
echo"</table>";
}
?>
<?php
table();
?>
函数的参数
参数列表是由零个、一个或多个参数组成的。每个参数是一个表达式,用逗号分隔。对于有参函数,在PHP脚本程序中和被调用函数之间有数据传递关系。定义函数时函数名后面括号内的表达式称为形式参数(简称“形参”),被调用函数名后面括号中的表达式称为实际参数(简称“实参”),实参和形参需要接顺序对应传递数据。如果函数没有参数列表,函数执行的任务就是固定的,用户在调用函数时不能改变函数内部的一些执行行为。
Demo
<?php
/**
自定义函数table()时,声明三个参数,参数之间使用逗号分隔
@paramstringtableName 需要一个字符串类型的表名
@paramintrows 需要一个整型数值设置表格的行数
@paramintcols 需要另一个整型值设置表格的列数
*/
functiontable(tableName,rows,cols){
echo"<table align='center' border='1' width='600'>";
echo"<caption><h1>tableName</h1></caption>";
for(out=0;out<rows;out++){//使用第二个参数rows指定表行数
bgcolor=out%2==0?"red":"blue";
echo"<tr bgcolor=".bgcolor.">";
for(in=0;in<cols;in++){//使用第三个参数cols指定表列数
echo"<td>".(out*cols+in)."</td>";
}
echo"</tr>";
}
echo"</table>";
}
?>
<?php
table("千度的表格",10,10);
?>
函数的返回值
函数的返回值是函数执行的结果,调用函数的脚本程序不能直接使用函数体里面的信息,但可以通过关键字return向调用者传递数据。return语句注意点如下:
<?php
/**
自定义函数table()时,声明三个参数,参数之间使用逗号分隔
@paramstringtableName 需要一个字符串类型的表名
@paramintrows 需要一个整型数值设置表格的行数
@paramintcols 需要另一个整型值设置表格的列数
*/
functiontable(tableName,rows,cols){
returnStr="这是返回的字符串";
echo"<table align='center' border='1' width='600'>";
echo"<caption><h1>tableName</h1></caption>";
for(out=0;out<rows;out++){//使用第二个参数rows指定表行数
bgcolor=out%2==0?"red":"blue";
echo"<tr bgcolor=".bgcolor.">";
for(in=0;in<cols;in++){//使用第三个参数cols指定表列数
echo"<td>".(out*cols+in)."</td>";
}
echo"</tr>";
}
echo"</table>";
returnreturnStr;
}
?>
<?php
echotable("千度的表格",10,10);
?>
❾ php中foreach循环语句中可以使用sql查询语句吗比如
可以,但是你这样做对数据库的资源是很大的消耗,如果数据不多的话可以拿全集通过PHP进行筛选,或者进行in查询
❿ php 当有两个for循环,
$sql=mysql_query("select*fromkjnumwherekjdatein($wherein)and((>1and<11)or(>1and<11)or(shi>1andshi<11)or(ge>1andge<11)or(si>1andsi<11)or(wu>1andwu<11))");
//再用PHP去操作
比如你的结果是:
$list=array(
array('kjdata'=>"20180401",''=>2,'shi'=>4,'ge'=>3,'si'=>2,'wu'=>4),
array('kjdata'=>"20180401",''=>4,'shi'=>2,'ge'=>3,'si'=>2,'wu'=>4),
array('kjdata'=>"20180402",''=>2,'shi'=>4,'ge'=>3,'si'=>1,'wu'=>4)....);
//你要转成以kjdata为key的3维数组
$list=array(
'20180401'=>array(
array(''=>2,'shi'=>4,'ge'=>3,'si'=>2,'wu'=>4),
array(''=>4,'shi'=>2,'ge'=>3,'si'=>2,'wu'=>4)
),
'20180402'=>array(
array(''=>2,'shi'=>4,'ge'=>3,'si'=>1,'wu'=>4).............)
);
//如上
$table=array();
foreach($listas$key=>$vo){
foreach($voas$v){
$table[$key][$v['']]++;
$table[$key][$v['shi']]++;
$table[$key][$v['ge']]++;
$table[$key][$v['si']]++;
$table[$key][$v['wu']]++;
}
}
var_mp($table);
//对于PHP即使1万次循环也不过不到0.01秒,而sql一条语句可能就是这个时间,所以尽量查询出结果,再PHP中操作分离