Intereting Posts
Алгоритм сортировки: итоговые суммы погашения Magento отсортированы неправильно, что приводит к неправильному исчислению налога на отправку Декодировать base64 string – php завивать и изменять размер удаленного изображения AngularJS withCredentials Not Sending Ошибка дескриптора файловой системы PHP Стиль неизученных связей с DOM и xpath memcache для php – невозможно подключиться Paypal: невозможно выполнить повторную авторизацию авторизированной ошибки платежа: произошла внутренняя ошибка службы Существуют ли ограничения длины для эха PHP? Какова концепция Service Container в Laravel? Как это работает в файлах .phtml в zend framework? Как запустить php-скрипт в фоновом режиме в другом php-скрипте (например, кнопку обновления) Как json_encode массив с французскими акцентами? Простой html dom file_get_html не работает – есть ли какое-либо обходное решение? 2 языка на веб-сайте, используя php

Опубликовать многомерный массив с использованием 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 .

Solutions Collecting From Web of "Опубликовать многомерный массив с использованием CURL и получить результат на сервере"

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']);