2014-08-28 44 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 

}