从jQuery发送多维数组到php

时间:2012-01-01 22:35:44

标签: php javascript jquery arrays

我将数组从jQuery传递给php。

使用以下代码从表生成数组:

    var stitchChartArray = [];
    var row = 0;

    // turn stitch chart into array for php
    $('#stitchChart').find('tr').each(function (index, obj) {

        //first row is table head- "Block #"
        if(index != 0){
            stitchChartArray.push([]);
            var TDs = $(this).children();
            $.each(TDs, function (i, o) {
                var cellData = [$(this).css('background-color'), $(this).find("img").attr('src')];
                stitchChartArray[row].push(cellData);
            });
            row++;
        }

    });

在控制台中它看起来像这样:

[[["rgb(75, 90, 60)", "symbols/177.png"], ["rgb(75, 75, 60)", "symbols/184.png"], ["rgb(75, 90, 60)", "symbols/177.png"], 7 more...], [["rgb(105, 105, 105)", "symbols/163.png"], ["rgb(75, 75, 60)", "symbols/184.png"], ["rgb(75, 90, 60)", "symbols/177.png"], 7 more...], [["rgb(105, 105, 105)", "symbols/163.png"], ["rgb(75, 90, 60)", "symbols/177.png"], ["rgb(75, 75, 60)", "symbols/184.png"], 7 more...], [["rgb(75, 90, 60)", "symbols/177.png"], ["rgb(75, 90, 60)", "symbols/177.png"], ["rgb(98, 119, 57)", "symbols/210.png"], 7 more...], [["rgb(105, 105, 105)", "symbols/163.png"], ["rgb(105, 105, 105)", "symbols/163.png"], ["rgb(150, 150, 195)", "symbols/72.png"], 7 more...], [["rgb(75, 165, 105)", "symbols/187.png"], ["rgb(134, 158, 134)", "symbols/64.png"], ["rgb(165, 180, 180)", "symbols/171.png"], 7 more...], [["rgb(60, 150, 75)", "symbols/189.png"], ["rgb(120, 120, 90)", "symbols/225.png"], ["rgb(143, 163, 89)", "symbols/209.png"], 7 more...]]

它代表一个表格的每一行 - >每个单元格的行 - > [0] rgb值为单元格中单元格[1]图标的bg。

这个jQuery代码从数组中返回正确的元素(和rgb值):

alert(stitchChartArray[1][1][0]); //row 1,cell 1, first value(rgb)

但是当它被发送到php脚本时:

$.post('makeChartPackage.php', {'stitchChart[]': stitchChartArray }, function(data){
        alert(data);
    });

php抛出错误:

  

不能在第33行的/Users/tnt/Sites/cross_stitch/makeChartPackage.php中使用字符串偏移作为数组

$stitchChart = $_POST['stitchChart']; 
echo $stitchChart[1][1][0]; //line 33

我假设我要么错误地构造数组,要么错误地将它传递给php脚本。

修改 我这样做是为了将数组返回给jQuery:

$stitchChart = $_POST['stitchChart'];
print_r($stitchChart); 

结果如下: 排列 (     [0] =&gt; rgb(75,90,60),symbols / 177.png,rgb(75,75,60),symbols / 184.png,rgb(75,90,60),symbols / 177.png,rgb(98,119) ,57),symbols / 210.png,rgb(180,195,105),symbols / 388.png,rgb(165,165,120),symbols / 235.png,rgb(75,75,60),符号/184.png,rgb(90,95,45),symbols / 195.png,rgb(120,120,75),symbols / 156.png,rgb(105,105,105),symbols / 163.png     [1] =&gt; rgb(105,105,105),symbols / 163.png,rgb(75,75,60),symbols / 184.png,rgb(75,90,60),symbols / 177.png,rgb(75,90) ,60),symbols / 177.png,rgb(165,165,120),symbols / 235.png,rgb(120,120,75),symbols / 156.png,rgb(75,90,60),符号/177.png,rgb(75,90,60),symbols / 177.png,rgb(105,105,105),symbols / 163.png,rgb(120,120,90),symbols / 225.png     [2] =&gt; rgb(105,105,105),symbols / 163.png,rgb(75,90,60),symbols / 177.png,rgb(75,75,60),symbols / 184.png,rgb(75,90) ,60),symbols / 177.png,rgb(98,119,57),symbols / 210.png,rgb(75,90,60),symbols / 177.png,rgb(75,75,60),符号/184.png,rgb(105,105,105),symbols / 163.png,rgb(120,120,90),symbols / 225.png,rgb(105,105,105),symbols / 163.png < / p>

看来数组不是多维的?

1 个答案:

答案 0 :(得分:1)

在你已经解决它的上下文中的

$_POST['stitchChart']存在(有效地)多维数组的JSON表示,存储为字符串。在PHP中将字符串视为多维索引数组时,您将收到该错误。第一个[x]被视为“字符串偏移量” - 即位置x处的字符 - 但下一个和任何后续[x]地址只能被视为数组(您无法获得单个字符的子字符串)并将发出您收到的错误。

要在PHP中以数组形式访问数据,您需要使用json_decode()

$stitchChart = json_decode($_POST['stitchChart'],TRUE); 
echo $stitchChart[1][1][0];

修改

因为jQuery data参数似乎无法处理多维数组,所以你应该使用Douglas Crockford的JSON-js库并将结果作为字符串传递给data。注意:使用json2.js

以下是您可以这样做的方法:

stitchChartArray = JSON.stringify(stitchChartArray);
$.post('makeChartPackage.php', {'stitchChart': stitchChartArray }, function(data){
    alert(data);
});

如果您使用此代码,我原来的PHP建议应该按预期工作。