2009-01-29 111 views
0

我通过AJAX发送一些数据到PHP文件。这是关于过滤器选项。无论如何,我发送它是这样的:PHP阵列问题

filter[0][data][type] string 
filter[0][data][value] automobiles 
filter[0][field] product 

filter[1][data][type] numeric 
filter[1][data][value] 6000 
filter[1][field] price 

这上面是从FireBug控制台。然后,在PHP:

$filter = $_POST['filter'.$i]; 
if (is_array($filter)) { 
    for ($i=0;$i<count($filter);$i++){ 
     switch($filter[$i]['data']['type']){ 
      case 'string' : 
         // I'm doing my select from database based on that and so on 

所以,这个翻译是: “给我所有的数据库都记录:嗯,让我们检查过滤器 ...我得到第一过滤器类型女巫是“串”女巫需要应用到名为“产品”的MySQL列...所以我正在寻找那里的“汽车”的价值......但我还没有完成,第二个过滤器指的是数据库中“价格”列的数字过滤器,所以我将它的价值和它添加到查询中,所以我最终选择所有价格大于6000的汽车。

到目前为止这么好。问题我我的数据获取方式发生了变化,我无法再以这种格式发送数据。新格式的URL女巫看起来是这样的:

filter[0][field]=prodct&filter[0][data][type]=string&filter[0][data][value]=automobiles&filter[1][field]=price&filter[1][data][type]=numeric&filter[1][data][value]=6000 

我能做的就这一个由“&”的爆炸,一个数组结束了......我可以做很多...问题是我不知道如何调整我的查询构建脚本来处理这种类型的接收数据。所以我可以做一个“开关($ filter [$ i] ['data'] ['type']) {“再次...

修改代码的任何想法?

谢谢!

+0

为什么你的数据发送到ajax脚本在url中?你不能发布数据并完全绕过这一步吗? – willoller 2009-01-29 04:21:21

回答

2

parse_str($ queryString);然后照常做一切事情。该方法将处理查询字符串,并导入变量的全局命名空间(这可能是危险的),所以也许使用它的第二种形式(手册页面上列出):

$result = array(); 
parse_str($queryString, $result) 
$filters = $result['filter']; 

foreach($filters as $filter) { 
// your code 
} 
0

我会将数据作为JSON对象发送,并将其转换为数组,就像您之前使用的数组一样。

在PHP上,您可以使用json_decode将JSON数据返回给数组,并且您可以像以前一样继续使用其余的代码。