使用CURL发布多维数组并在服务器上获取结果

时间:2013-01-31 11:51:59

标签: php arrays curl multidimensional-array

我使用CURL将数据从本地计算机发送到服务器。数据是多维数组。

Array
(
[0] => stdClass Object
    (
        [id] => 1
    )
[1] => stdClass Object
    (
        [id] => 0
    )
[2] => stdClass Object
    (
        [id] => 11
    )
)

我使用以下代码发送数据。

$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_VERBOSE, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, "my_url");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $array);  // $array is my above data

但在服务器上,当我尝试将此传入数据放入文件或仅print_r时,它会在下面输出

Array
(
[0] => Array
[1] => Array
[2] => Array
)

但我想要多维输出。

我尝试使用print_r($_POST[0]),但只提供Array文字。

3 个答案:

答案 0 :(得分:22)

cURL只能接受一个简单的键值配对数组,其中值是字符串,它不能像你的数组那样是一个对象数组。但它确实接受现成的POST数据字符串,因此您可以自己构建字符串并传递它:

$str = http_build_query($array);

...

curl_setopt($ch, CURLOPT_POSTFIELDS, $str);

接收端的print_r($_POST)将显示:

Array
(
    [0] => Array
        (
            [id] => 1
        )

    [1] => Array
        (
            [id] => 0
        )

    [2] => Array
        (
            [id] => 11
        )

)

答案 1 :(得分:3)

我会去序列化和反序列化:

1)在发送阵列之前,将其序列化(并将传输模式设置为二进制):

(...)
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, TRUE);           // need this to post serialized data
curl_setopt($ch, CURLOPT_POSTFIELDS, serialize($array));  // $array is my above data

2)收到数据后,将其反序列化:

$array = unserialize($_POST);

更多详情herehere

答案 2 :(得分:3)

$param['sub_array'] = json_encode($sub_array);

在另一边

$sub_array= json_decode($_POST['sub_array']);