2012-05-08 84 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