2011-09-29 29 views
0

對不起,可能會提出一個基本問題,但我正在停電。從數組陣列中製作一個字符串

如果我有一個數組的數組:

Array 
(
    [appsversion] => Array 
     (
      [0] => appsversion='6.1.0.33' 
      [1] => appsversion='6.1.0.40' 
     ), 
    [osversion] => Array 
     (
      [0] => osversion='6.1.0.53' 
      [1] => osversion='6.1.0.42' 
     ) 
) 

我怎麼請構建具有OR和它一個SQL條件?

I.e.這樣的事情:

$condition = ''; 
    foreach ($CONDITIONS as $key => $value) { 
     # XXX I'm so lost here XXX 
    } 

    $sql = sprintf('select %s from mytable where %s', $condition); 
    $sth = $pg->prepare($sql); 
    $sth->execute(); 

我需要構建的字符串

(appsversion='6.1.0.33' OR appsversion='6.1.0.40') AND 
    (osversion='6.1.0.53' OR osversion='6.1.0.42') 

或:

appsversion in ('6.1.0.33', '6.1.0.40') AND 
    osversion in ('6.1.0.53', '6.1.0.42') 

請給我一些提示 - 讓我的大腦又開始了:-)

回答

2

有:

$where = array(); 
foreach ($conditions as $values) { 
    $where[] = '('.implode(' OR ', $values).')'; 
} 
$string = implode(' AND ', $where); 

產量:

(appsversion='6.1.0.33' OR appsversion='6.1.0.40') AND (osversion='6.1.0.53' OR osversion='6.1.0.42') 
+0

真棒,謝謝大家的答案 –

1

你的意思是這樣的?

$condition = "(appsversion = '" . implode("' OR appsversion = '", $conditions['appsversion']) . "')"; 
$condition .= " AND (osversion = '" . implode("' OR osversion = '", $conditions['osversion']) . "')"; 

或者吸塵器IN:

$condition = "appsversion IN ('" . implode("', '", $conditions['appsversion']) . "')"; 
$condition .= " AND osversion IN ('" . implode("', '", $conditions['osversion']) . "')"; 
+0

謝謝,但如果我不知道是什麼鍵? (即不知道有「appsversion」和「osversion」)。 –

+0

這會產生'appsversion =('6.1.0.33'或'6.1.0.40')'。我不認爲這會正常工作。 – Czechnology

+0

發佈後我發現我的錯誤,更新,謝謝。 @Alex然後你擰了。你爲什麼不知道鑰匙? – CodeCaster

0
$conditions1 = array(); 
foreach ($CONDITIONS['appsversion'] as $value) { 
    $conditions1[] = sprintf("appversion = '%s'", mysql_real_escape_string($value)); 
} 

$conditions2 = array(); 
foreach ($CONDITIONS['osversion'] as $value) { 
    $conditions1[] = sprintf("osversion = '%s'", mysql_real_escape_string($value)); 
} 

$sql = sprintf('select %s from mytable where (%s) AND (%s)', $cols, implode(' OR ', $conditions1), implode(' OR ', $conditions2)); 
$sth = $pg->prepare($sql); 
$sth->execute(); 
1

如果您的原始數組不重複的鍵名,並提供價值「原樣」(我有點誤解你的問題,但可能是很有用):

$conditions = array(
    'appsversion' => Array('6.1.0.33', '6.1.0.40'), 
    'osversion' => Array('6.1.0.53', '6.1.0.42'), 
); 

foreach ($conditions as $key => &$values) { 
    foreach($values as &$value) 
     $value = sprintf("%s='%s'", $key, $value); 
    $values = sprintf("(%s)", implode(' OR ', $values)); 
} 
unset($values, $value); 
echo implode(" AND \n", $conditions); 

輸出/ Demo

(appsversion = '6.1.0.33' OR appsversion = '6.1.0.40')AND (OSVERSION = '6.1.0.53' OR OSVERSION = '6.1.0.42')

0
foreach($C as $key => $value) 
{ 
    $str .= ($str ? ' AND ' : '') . '(' . implode(' OR ',$value) . ')'; 
} 
相關問題