【问题标题】:Post multidimensional array using CURL and get the result on server使用 CURL 发布多维数组并在服务器上获取结果
【发布时间】:2013-01-15 12:20:23
【问题描述】:

我正在使用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 文本。

【问题讨论】:

    标签: php arrays curl multidimensional-array


    【解决方案1】:
    $param['sub_array'] = json_encode($sub_array);
    

    另一边

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

    【讨论】:

    • 嗯,我不记得我是否尝试过这种方式。但可能对其他用户有用。 :)
    【解决方案2】:

    我会尝试序列化和反序列化:

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

    更多详情here 和 here

    【讨论】:

    • 很好,但它没有这样工作,我不得不curl_setopt($ch, CURLOPT_POSTFIELDS, array('data'=>serialize($array))); 然后$array = unserialize($_POST['data']);
    【解决方案3】:

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

    【讨论】:

    • 感谢您的回答,让您知道何时将其集成到我的代码中。我还有一个问题,我尝试发送数组数组,但在接收端它给出了相同的输出Array ( [0] => Array [1] => Array [2] => Array )
    • 是的,cURL 不能采用数组或对象数组,它只能采用一维字符串数组,除非您手动构建发布数据(如答案中所示)。
    • 感谢 MrCode 今天我已经实现了你的代码,现在它可以按我的意愿工作了。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 2011-04-15
    • 2021-03-15
    • 2011-04-21
    • 2022-11-22
    • 2016-05-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多