1

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 }} と画像リンクを含む個別の配列です。$check_colors は PHP でハードコーディングされた RGB 値の連想配列で、人間が読める色に変換されます。私の問題は、リンクがあることです:

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

$colors[$color_entry] が取得しようとしている 2 次元配列になっていないため、「致命的なエラー: タイプ stdClass を配列として使用できません」がスローされます。だから、私が間違っていることと、この2次元配列をPHPコードでループさせる方法を知っている人はいますか?

4

1 に答える 1

1

エラーはまさにそれが言っていることです: OBJECT を ARRAY として使用することはできません。json_decode を使用すると、デフォルトでオブジェクトになります。連想配列にする必要があります。

したがって、これを次のように変更します。

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

これで、必要に応じて $colors を反復処理できます。

于 2012-05-08T05:04:19.737 に答える