10

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.

3 Answers 3

26

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
        )

)
Sign up to request clarification or add additional context in comments.

3 Comments

Thanks for answering, let you know when I will integrate this in my code. I have one more question ,I tried with sending array of array but at receiving end it gives the same output Array ( [0] => Array [1] => Array [2] => Array )
Yes, cURL can't take an array of arrays or an array of objects, it can only take a one dimensional array of strings, unless you build the post data manually (as in the answer).
Thanks MrCode today I have implemented your code and now it is working as I wanted. Thanks again.
3

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

More details here and here

1 Comment

great, but it didnt work this way, i had to curl_setopt($ch, CURLOPT_POSTFIELDS, array('data'=>serialize($array))); and then $array = unserialize($_POST['data']);
3
$param['sub_array'] = json_encode($sub_array);

and on the other side

$sub_array= json_decode($_POST['sub_array']);

1 Comment

Well I don't remember that whether I have tried this way. But may be useful for other users. :)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.