Разместить многомерный массив с помощью 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']);