Reputation: 30488
I am sending data from my local machine to server using CURL
. And the data is multidimensional array.
Array
(
[0] => stdClass Object
(
[id] => 1
)
[1] => stdClass Object
(
[id] => 0
)
[2] => stdClass Object
(
[id] => 11
)
)
I am using this below code for sending the data.
$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
But at server when I try to put this incoming data to file or just print_r
it gives me this below output
Array
(
[0] => Array
[1] => Array
[2] => Array
)
But I want the output in multidimensional.
I tried with print_r($_POST[0])
but it gives only Array
text.
Upvotes: 10
Views: 15534
Reputation: 2191
$param['sub_array'] = json_encode($sub_array);
and on the other side
$sub_array= json_decode($_POST['sub_array']);
Upvotes: 3
Reputation: 1971
I would give a go to serialize and unserialize:
1) Before sending your array, serialize it (and set your transfer mode to binary):
(...)
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) When you receive the data, unserialize it:
$array = unserialize($_POST);
Upvotes: 3
Reputation: 64526
cURL can only accept a simple key-value paired array where the values are strings, it can't take an array like yours which is an array of objects. However it does accept a ready made string of POST data, so you can build the string yourself and pass that instead:
$str = http_build_query($array);
...
curl_setopt($ch, CURLOPT_POSTFIELDS, $str);
A print_r($_POST)
on the receiving end will show:
Array
(
[0] => Array
(
[id] => 1
)
[1] => Array
(
[id] => 0
)
[2] => Array
(
[id] => 11
)
)
Upvotes: 26