21

附加代码返回“注意:数组到字符串的转换...”。只是我的数组正在作为包含“数组”字的字符串处理到远程服务器。其余的变量都很好。

如何在$anarray没有这个问题的情况下传递我的数组?

<?php

$data = array(
    'anarray' => $anarray,
    'var1' => $var1,
    'var2' => $var2
 );

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "MY_URL");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

curl_exec($ch);

?>
4

5 回答 5

34

采用http_build_query()

curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
// The values of variables will be shown but since we don't have them this is what we get

然后您可以使用$_POST超全局正常访问它

于 2010-01-28T21:43:48.957 回答
15

完成您所追求的最佳方法是使用http_build_query().

于 2010-01-28T22:17:31.670 回答
1

来自http://www.php.net/manual/en/function.curl-setopt.php的 CURLOPT_POSTFIELDS 描述

在 HTTP“POST”操作中发布的完整数据。要发布文件,请在文件名前加上 @ 并使用完整路径。文件类型可以通过使用格式为“;type=mimetype”的文件名来明确指定。此参数可以作为 urlencoded 字符串(如 'para1=val1¶2=val2&...')或作为字段名称作为键和字段数据作为值的数组传递。如果 value 是一个数组,则 Content-Type 标头将设置为 multipart/form-data。从 PHP 5.2.0 开始,如果文件以 @ 前缀传递给此选项,则 value 必须是数组。

于 2013-05-01T17:27:31.600 回答
1

由于 HTTP 协议的性质以及 curl_setopt 函数的工作方式,$anarray 不能直接作为数组传递。

以下声明:

curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

接受一个 POST 参数数组,每个参数都必须有一个字符串名称和一个STRING值。您正在传递一个数组值,因此 PHP 处理器被迫使用一些蹩脚的内置算法将其转换为字符串,这会导致发出前面提到的通知(“数组到字符串的转换...”)。

因此,为了正确地将该数组 ($anarray) 传递给另一方,您必须自己处理它的编码(到一个字符串),而另一方必须处理它的解码(从一个字符串)。

在这种情况下,我的方法是 JSON。它几乎适用于所有情况。您所要做的就是应用以下技术:

$data=array(
    'anarray'=>json_encode($anarray),
    'var1'=>$var1,
    'var2'=>$var2
    );

然后,在连接的另一端,您将通过以下方式检索原始数组:

$anarray=json_decode($_POST['anarray'],true); // true indicates for associative array rather than an object
于 2013-06-24T16:56:08.380 回答
0

如果 $anarray 是一个数组,我怀疑它是,它不应该是。通过连接或任何适当的方法将其转换为字符串。

编辑:见 Eric Butera 的回答。

于 2010-01-28T21:43:22.443 回答