9

我正在使用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文本。

4

3 回答 3

25

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

$str = http_build_query($array);

...

curl_setopt($ch, CURLOPT_POSTFIELDS, $str);

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

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

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

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

)
于 2013-01-31T12:21:28.550 回答
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);

更多细节在这里这里

于 2013-01-31T12:42:47.640 回答
3
$param['sub_array'] = json_encode($sub_array);

而在另一边

$sub_array= json_decode($_POST['sub_array']);
于 2016-06-24T12:59:13.103 回答