使用 CURL 发布多维数组并在服务器上获取结果

Posted

技术标签:

【中文标题】使用 CURL 发布多维数组并在服务器上获取结果【英文标题】:Post multidimensional array using CURL and get the result on server 【发布时间】: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 文本。

【问题讨论】:

【参考方案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 今天我已经实现了你的代码,现在它可以按我的意愿工作了。再次感谢。

以上是关于使用 CURL 发布多维数组并在服务器上获取结果的主要内容,如果未能解决你的问题,请参考以下文章

在多维数组中获取承诺的结果

通过 PHP cURL 将多维数组发布到 PayPal

curl的$post传递多维数组

PHP/mysql:使用数组查询 MySQL 并在数组中获取结果

如何使用codeigniter从mysql中获取多个多维数组中的数据?

从数据库结果生成多维数组的递归函数