Я отправляю данные с локальной машины на сервер с помощью 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
.
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 ) )
Я бы дал сериализацию и unserialize:
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);
Подробнее здесь и здесь
$param['sub_array'] = json_encode($sub_array);
и с другой стороны
$sub_array= json_decode($_POST['sub_array']);