PHP foreach循环
下面有一个数组示例,我使用它根据表单中勾选的选项动态创建SQL查询。下面的代码测试是否存在值,如果存在,请将其附加到数组中:PHP foreach循环,php,foreach,Php,Foreach,下面有一个数组示例,我使用它根据表单中勾选的选项动态创建SQL查询。下面的代码测试是否存在值,如果存在,请将其附加到数组中: if ($lookchild) { $val[]='lookchild'; } if ($mentalcap) { $val[]='mentalcap'; } if ($mentalheal) { $val[]='mentalheal'; } if ($olderpeople) { $val[]='olderpeople'; } if ($palcare) { $val[
if ($lookchild) { $val[]='lookchild'; }
if ($mentalcap) { $val[]='mentalcap'; }
if ($mentalheal) { $val[]='mentalheal'; }
if ($olderpeople) { $val[]='olderpeople'; }
if ($palcare) { $val[]='palcare'; }
然后,我在数组中循环并添加SQL语句的其余部分:
foreach ($val as $r){
echo $r.'=1 AND ';
}
这将产生:
olderpeople=1 AND palcare=1 AND lookchild=1 AND
当循环到达最后一个条目时,我不希望它向其追加AND,因为SQL语句需要在该点之后关闭
我希望它如何完成:
olderpeople=1 AND palcare=1 AND lookchild=1
在这些情况下,您可以使用
它将阵列“粘合”在一起
内爆(字符串$glue,数组)
元(件)
例如:
echo implode('=1 AND ', $val);
echo '=1';
试试这个:
$isFirst = true;
foreach ($val as $r){
if(!$isFirst){
echo ' AND ';
}else{
$isFirst = false;
}
echo $r.'=1';
}
这是为了:
一个常见的技巧是使用“WHERE 1=1”,然后可以在没有语法错误的情况下附加“AND foo=bar”
WHERE 1=1 AND olderpeople=1 AND palcare=1 AND lookchild=1
使用
您不必使用for循环:)只要不打印
和foreach
循环的最后一个值即可。以下是要使用的代码:
foreach ($val as $r){
echo $r.'=1';
if (next($val)) {
echo ' AND ';
}
}
我将使用以下命令删除字符串的最后4个字符:
$r = '';
foreach ($val as $r){
$r.'=1 AND ';
}
$r = substr($r, 0, -4);
echo $r;
$r='';
外汇($val为$r){
$r.=1和';
}
$r=substr($r,0,-4);
echo$r;
签出,快速简便在将palcare
分配给$val[]
时,将$val[]=“palcare=1”
等分配给他们
implode(" AND ", $val);
如果你必须使用foreach(出于某种原因,你不能使用内爆,这是一个很好的建议),你将需要一种方法来跟踪你的位置
我想在第一项之外的任何内容之前添加“AND”,而不是在最后一项之外的任何内容之后添加它,类似这样:
$sqlwhere = "";
foreach ($val as $r){
if($sqlwhere ==""){
$sqlwhere = $r;
}
else {
$sqlwhere .= " AND " . $sqlwhere;
}
}
echo $sqlwhere;
我使用了varable,而不是仅仅重复它,我发现这在复杂的sql语句中很有用。使用内爆。但是,如果出于某种原因需要循环(例如需要执行更多的逻辑而不仅仅是连接字符串),请使用分隔符方法:
$seperator = '';
$result = '';
foreach ($array as $value) {
// .. Do stuff here
$result .= $seperator . $value;
$seperator = ' AND ';
}
其好处是既简洁又灵活,无需始终检查条件…因为您使用的是数组,所以还可以使用count来计算数组中有多少个,如果是最后一项,则不要附加“and”
$result = array();
$totalcount = count($val);
$currentCount = 0;
foreach ($val as $r){
$currentCount ++;
if ($currentCount != $totalcount){$result[] = "$r=1 AND ";}else{$result[] = "$r=1";}
}
最后一项呢<代码>blah=1和橙色
。(它将无法获得必要的=1
)您缺少上一个回音的结束引号,并且在和
之后缺少一个空格。谢谢Michael。按要求工作!
$seperator = '';
$result = '';
foreach ($array as $value) {
// .. Do stuff here
$result .= $seperator . $value;
$seperator = ' AND ';
}
$result = array();
$totalcount = count($val);
$currentCount = 0;
foreach ($val as $r){
$currentCount ++;
if ($currentCount != $totalcount){$result[] = "$r=1 AND ";}else{$result[] = "$r=1";}
}