Foreach döngü geçen sözcük Çıkarma

4 Cevap php

Ben hükümler dizide kaç dayalı NEREDE Mysql üzerinden kuran bir temel işlevi, inşa ediyorum.

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

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

hangi çıkış olacak

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

Ancak tabii ki, nasıl dize çıkardıktan yaklaşık son VE gitmek anlamına istemiyor musun?

Teşekkürler

4 Cevap

Yapabileceğin

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

Ama belki de daha şık bir çözüm

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

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

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

Ben bunu bu şekilde yapardı:

$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;

Ben bir 1=1 where maddesi böylece sorgu olacak valid dizisi $array bile {[(ekledik 4)]}.

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

Sorusunu yeniden düzenleme. Sen son hariç her fıkra sonra bir AND koymak için çalışıyoruz. Bu ilk hariç her fıkrasında önce AND koymak daha kolay olacaktır.


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

Belki de bu durumda en kolay yolu (diğer insanların substr kullanarak söz) değildir. Ancak, ben bu gibi durumlarda genel olarak hatırlamak için iyi bir araç buldum.