Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP foreach循环_Php_Foreach - Fatal编程技术网

PHP foreach循环

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[

下面有一个数组示例,我使用它根据表单中勾选的选项动态创建SQL查询。下面的代码测试是否存在值,如果存在,请将其附加到数组中:

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";}

}