从FOREACH循环中删除最后一个单词

时间:2010-03-26 04:06:49

标签: php foreach

我正在构建一个基本函数,它根据数组中的数量来构建Mysql WHERE子句。

$array = array('id' => '3', 'name' => 'roger'); 
$sql = "SELECT * FROM table WHERE ";

foreach ($array as $k => $v) {
    $sql .= $k . ' = ' . $v . ' AND ';
}

将输出

SELECT * FROM table WHERE id = 3 AND name = roger AND

但是很明显我不想要最后一个AND,我该如何从字符串中删除它?

由于

5 个答案:

答案 0 :(得分:12)

你可以做到

$sql = substr($sql, 0, -5);

但也许更优雅的解决方案是

$array = array('id' => '3', 'name' => 'roger'); 
$clauses = array();

foreach ($array as $k => $v)
    $clauses[] = $k . ' = ' . $v;

$sql = "SELECT * FROM table WHERE " . implode(' AND ', $clauses);

答案 1 :(得分:2)

$array = array('id' => '3', 'name' => 'roger'); 
$sql = "SELECT * FROM table WHERE ";

foreach ($array as $k => $v) {
    $sql .= $k . ' = ' . $v . ' AND ';
}

$sql = substr(trim($sql), 0, -3);

答案 2 :(得分:1)

我会这样做:

$sql = "SELECT * FROM table WHERE 1=1 "; 
// add "AND x=y" for every pair of key, value pair in the array.    
foreach ($array as $k => $v) 
    $sql .= ' AND ' . $k . ' = ' . $v;

我在1=1子句中添加了where,这样即使数组$array 为空,您的查询也将有效 /强>

答案 3 :(得分:0)

$sql = trim($sql, ' AND ');

答案 4 :(得分:0)

重新提出问题。你试图在除了最后一个之外的每个子句之后加一个AND。除了第一个之外,在每个子句之前加一个AND会更容易。


$first = true;
foreach ($array as $k => v) {
    if (!$first) $sql .= ' AND ';
    $first = false;
    sql .= $k . ' = ' . $v;
}

在这种情况下可能不是最简单的方法(其他人提到使用substr)。但是,我发现这是一个很好的工具,可以记住这样的情况。