php数组不正确

时间:2010-11-01 13:29:52

标签: php javascript arrays

获取字符串/数组的初始javascript:

<script type="text/javascript">
$(document).ready(function() {
    $("#table").tableDnD({
    onDrop: function(table, row){
        var rows = table.tBodies[0].rows;
            var debugStr = "";
            for (var i=1; i<rows.length; i++) {
                debugStr += rows[i].id+":";
                //debugStr += rows[i].id;
            }
        data = debugStr; // colon seperated
        }
    });
});
function sendData()
{
    var packed = ""; // Initialize packed or we get the word 'undefined'
    for (i = 0; (i < data.length); i++) {
    if (i > 0) {
        packed += ",";
        }
    packed += escape(data[i]);
        }
    document.data.data.value = packed;
    document.data.submit();
}
</script>

现在在PHP ...

从post:

返回我的数组/字符串
$packed = $_POST['data'];
$data = split(":", $packed);
for ($i = 0; ($i < count($data)); $i++) {
  $data[$i] = rawurldecode($data[$i]);
  $data[$i] = str_replace(",", "", $data[$i]);
  $data[$i] = str_replace(":", ",", $data[$i]);
}

从中创建一个数组:

$arrayUpdated = array();
foreach($data as $value) {
    print_r($value);
    $arrayUpdated[] = $value;
    }

返回:

Array ( [0] => 9,8,6,5,4,3,2,15,1,0, ) 

我期待的时候:

Array ( [0] => 9, [1] => 8, [2] => 6, [3] => 5, [4] => 4, [5] => 3, [6] => 2, [7] => 15, [8] => 1, [9] => 0, ) 

我错了什么? 谢谢, 安迪

2 个答案:

答案 0 :(得分:2)

既然你已经在使用JQuery,那么以JSON格式发送数据会不会更容易,而不是手动将它构建成分隔的冒号/逗号,然后在PHP中手动拆分它?

在您的JS页面中,通过调用sendData()替换大多数$.toJSON(data);函数:

function sendData() {
    document.data.data.value = $.toJson(data);
    document.data.submit();
}

在您的PHP代码中,使用json_decode()将数据加载到一个数组中,其结构与Javascript中的结构完全相同。

$data=json_decode($_POST['data']);
print_r($data);

*注意:您可能需要一个额外的JQuery插件来获取toJSON()方法 - 有关详细信息,请参阅http://code.google.com/p/jquery-json/

答案 1 :(得分:1)

不是一个直接的答案 - 但如果您需要快速修复(PHP):

// if $myarray=Array ( [0] => 9,8,6,5,4,3,2,15,1,0, ) ;

$myarray=explode(",",$myarray[0]);

另请注意,PHP 5.3.0中不推荐使用split函数,您可以使用explode替换。