我使用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
文字。
答案 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);
答案 2 :(得分:3)
$param['sub_array'] = json_encode($sub_array);
在另一边
$sub_array= json_decode($_POST['sub_array']);