2014-08-28 57 views
0

我有一個ajax系統來過濾客戶網站的結果。編輯PHP JSON數組值

我們正在實施「場地類型」過濾器。每個複選框將被命名爲:venuetype [typeHere]。

現在顯然這將被傳遞給PHP那樣,但我感興趣的是typeHere部分。

我需要檢查venuetype是否在數組中,如果它是然後刪除venuetype []和只剩下typeHere。

我的PHP腳本如下:

$select = 'SELECT *'; 
$from = ' FROM venues'; 
$where = ' WHERE TRUE'; 
$opts = isset($_POST['filterOpts'])? $_POST['filterOpts'] : array(''); 

if (in_array("nocorkage", $opts)){ 
$where .= " AND nocorkage = 1"; 
} 

if (in_array("hotel", $opts)){ 
$where .= " AND hotel = 1"; 
} 

if (in_array("selfcatering", $opts)){ 
$where .= " AND selfcatering = 1"; 
} 

if (in_array("marquees", $opts)){ 
$where .= " AND marquees = 1"; 
} 
if (in_array("inhousecatering", $opts)){ 
$where .= " AND inhousecatering = 1"; 
} 
if (in_array("outsidecatering", $opts)){ 
$where .= " AND outsidecatering = 1"; 
} 
if (in_array("licensed", $opts)){ 
$where .= " AND licensed = 1"; 
} 
if (in_array("venuetype", $opts)){ 
// Function to go here 
} 
$sql = $select . $from . $where; 
$statement = $pdo->prepare($sql); 
$statement->execute(); 
while($output = $statement->fetch(PDO::FETCH_ASSOC)) 
{ 
    $return[]=array('id'=>$output['id'], 
       'title'=>$output['title'], 
       'main_image'=>$output['main_image']); 
} 
$json = json_encode($return); 
echo($json); 
?> 

可能有人給我什麼,我需要做的,我想PHP正則表達式的想法......請問這就夠了?

+2

不,你不需要正則表達式。 $ opts ['venuetype']應該是一個數組。 – 2014-08-28 12:56:57

+0

而不是使用,並獲得數組鍵(室外),爲什麼不使用。然後在PHP中,你只需循環遍歷$ _POST [「venueType」]數組,這將給你所有的場地類型(typeHere)值。 – jbyrd 2014-08-28 13:01:21

回答

1

律位題外話

我會創造我的代碼就像

function setWhere($array,$opts,&$where){ 
    foreach($array as $arr){ 
     if(in_array($arr,$opts)) 
      $where .= " AND {$arr} = 1"; 
    } 
} 

$wAarray = array("nocorkage", 
       "hotel", 
       "selfcatering", 
       "marquees", 
       "inhousecatering", 
       "outsidecatering", 
       "licensed"); 

setWhere($wArray, $opts, $where); 

//... more if your code 

,而不是X if語句

說明: 的問題是:爲什麼$其中有一個符號之前?

這是給變量

實例的引用:

$foo = "hello"; 
$bar = "world"; 
function doSomething($str){ 
    return $str; 
} 
echo $bar; //outputs: world 
$bar = doSomething($foo); 
echo $bar; //outputs: hello 

相同的參考

$foo = "hello"; 
$bar = "world"; 
function doSomething(&$str){ 
    $str = $foo; 
} 

echo $bar; //outputs: world 
doSomething($bar); 
echo $bar; //outputs: hello 
+0

沒有主題,但很有幫助。 在函數setWhere上,爲什麼它在$ where之前有一個&符號?其參考文獻爲 – 2014-08-28 13:29:22

+0

。所以你放在那裏的var會被操縱。你可以刪除它並使用返回。它取決於你:)我prefere引用:D – Dwza 2014-08-29 08:24:24

0

不能完全確定這就是你所需要的,但如果你使用:

foreach($opts["venuetype"] as $typeHere => $venuetype){ 

    // $typeHere will iterate all the key names in the venuetype array 

}