2009-01-29 136 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數據返回給數組,並且您可以像以前一樣繼續使用其餘的代碼。