Разместить многомерный массив с помощью CURL и получить результат на сервере
я отправляю данные с моей локальной машины на сервер с помощью 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 ответов
cURL может принимать только простой парный массив ключ-значение, где значения являются строками, он не может принимать массив, подобный вашему, который является массивом объектов. Однако он принимает готовую строку данных POST, поэтому вы можете построить строку самостоятельно и передать ее вместо этого:
$str = http_build_query($array);
...
curl_setopt($ch, CURLOPT_POSTFIELDS, $str);
A print_r($_POST)
на приемном конце покажут:
Array
(
[0] => Array
(
[id] => 1
)
[1] => Array
(
[id] => 0
)
[2] => Array
(
[id] => 11
)
)
Я бы дал пойти сериализовать и восстановить:
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) Когда вы получаете данные, unserialize его:
$array = unserialize($_POST);
$param['sub_array'] = json_encode($sub_array);
и на другой стороне
$sub_array= json_decode($_POST['sub_array']);