PHP цикл foreach - PullRequest
       3

PHP цикл foreach

3 голосов
/ 20 августа 2010

Ниже приведен пример массива, который я использую для динамического создания запроса 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

Ответы [ 11 ]

10 голосов
/ 20 августа 2010

Implode

В этих ситуациях вы можете использовать implode

Он «склеивает» массив.

взорваться (строка $ клей, массив $ штук)

Пример:

echo implode('=1 AND ', $val);
echo '=1';
3 голосов
/ 20 августа 2010

Обычный прием - использовать WHERE 1 = 1, тогда вы можете добавить 'AND foo = bar' без синтаксической ошибки.

WHERE 1=1 AND olderpeople=1 AND palcare=1 AND lookchild=1
1 голос
/ 20 августа 2010

Вместо присвоения palcare $val[], присваивания $val[] = "palcare = 1" и т. Д. Их

implode(" AND ", $val);
1 голос
/ 20 августа 2010

Только не печатайте AND для последнего значения цикла foreach. Вот код для использования:

foreach ($val as $r){
    echo $r.'=1';

    if (next($val)) {
        echo ' AND ';
    }
}
1 голос
/ 20 августа 2010

использовать функцию взрыва

$sql = implode("=1 AND ", $array)."=1";

и вам не придется использовать цикл for:)

1 голос
/ 20 августа 2010

Вот для чего implode () :

$result = array();
foreach ($val as $r){
    $result[] = "$r=1";
}
$result = implode($result, ' AND ');

Живой пример

0 голосов
/ 20 августа 2010

Поскольку вы используете массив, вы также можете использовать count, чтобы выяснить, сколько в массиве, и если вы находитесь на последнем элементе, не добавляйте 'AND'.

0 голосов
/ 20 августа 2010

Используйте взорваться. Но если по какой-то причине вам нужно выполнить цикл (например, вам нужно сделать больше логики, чем просто соединение строк), используйте подход с разделителями:

$seperator = '';
$result = '';
foreach ($array as $value) {
    // .. Do stuff here
    $result .= $seperator . $value;
    $seperator = ' AND ';
}

Преимущество заключается в краткости и гибкости без постоянной проверки условий ...

0 голосов
/ 20 августа 2010

Если вам нужно сделать это с помощью foreach (и по какой-то причине вы не можете использовать implode, что является хорошим предложением), вам понадобится способ отслеживать, где вы находитесь.

Я думал добавить «И» перед чем-либо, кроме первого элемента, вместо того, чтобы добавлять его после чего-либо, кроме последнего элемента, что-то вроде этого:

$sqlwhere = "";
foreach ($val as $r){
   if($sqlwhere ==""){
      $sqlwhere = $r;
   }
   else {
      $sqlwhere .= " AND " . $sqlwhere;
   }
}
echo $sqlwhere;

Я использовал varable вместо того, чтобы просто выводить его тоже, что я считаю полезным в сложных SQL-выражениях.

0 голосов
/ 20 августа 2010

Я бы удалил последние 4 символа строки:

$r = '';

foreach ($val as $r){
    $r.'=1 AND ';
}

$r = substr($r, 0, -4);
echo $r;

Оформить заказ http://ca3.php.net/manual/en/function.substr.php, быстро и просто

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...