2012-05-08 121 views
1

我在jQuery中創建的關聯數組轉換爲我可以在PHP中訪問和使用的關聯數組時遇到問題。將二維關聯jquery數組轉換爲php數組

我使用以下方法來建立一個關聯數組:

var colors = {}; 
$(this).find('input[name="color_id"]').each(function() { 
    var color_entry_id = $(this).val(); 
    colors[color_entry_id] = jQuery.makeArray($(this).siblings(".colors." + $(this).val()).find(".img_color a.selected").map(function() { 
     return $(this).css("background-color"); 
    })); 
}); 

基本上,上面的代碼應該返回形式的東西:

colors = { 
    "{{ color_entry_id }}": [array of string rgb values] 
} 

我然後將其與發送到我的PHP腳本如下:

$.post(
    "test.php", 
    { "edit_colors": JSON.stringify(colors) }, 
    ... 
); 

在我的PHP,我想能夠抓住對應於{ {color_entry_id}}並遍歷值以在更新查詢中使用。以下是我的PHP代碼:

$check_colors = array(
    "rgb(204, 51, 51)" => "red", 
    "rgb(102, 153, 204)" => "sky_blue", 
    "rgb(0, 204, 51)" => "lime_green", 
    "rgb(0, 102, 0)" => "dark_green", 
    "rgb(153, 0, 0)" => "burgandy", 
    "rgb(255, 102, 51)" => "orange", 
    ... 
); 

$colors = json_decode($_POST['edit_colors']); 

foreach($images as $color_entry => $image_link) { 
    $update_color_query = "UPDATE color SET "; 
    foreach(array_keys($check_colors) as $color) { 
     if(in_array($color, $colors[$color_entry])) { 
      $update_color_query .= $check_colors[$color] . "=1, "; 
     } else { 
      $update_color_query .= $check_colors[$color] . "=0, "; 
     } 
    } 
    $update_color_query .= "image_url='$image_link' WHERE id=$color_entry"; 
    mysql_query($update_color_query); 
} 

在上面的代碼中,圖像是與對應一個單獨的數組{{color_entry_id}} S和圖像鏈接爲好。 $ check_colors是一個PHP硬編碼的rgb值關聯數組,用於人類可讀的顏色。我的問題是鏈接:

in_array($color, $colors[$color_entry]) 

拋出一個「致命錯誤:無法使用類型stdClass的爲陣」,因爲$顏色[$ color_entry]不成爲二維數組我試圖得到它是。所以,任何人都知道我在做什麼錯了,我怎麼才能讓這個二維數組在我的PHP代碼中循環?

回答

1

錯誤正是它所說的:你不能使用OBJECT作爲ARRAY。當你使用json_decode時,它默認爲一個對象。你需要它是一個關聯數組。

所以改成這樣:

$colors = json_decode($_POST['edit_colors'], true); 

現在,你可以通過$,因爲你需要重複顏色。

+0

哇,我什至沒有看到文檔的那一部分。感謝您指出了這一點。 – jrubins