附加的代码返回“注意:数组到字符串转换...”。只是我的数组被作为包含“Array”字符的字符串处理到远程服务器。其余的变量都很好。
如何在没有此问题的情况下传递数组$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);
?>
答案 0 :(得分:27)
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
超全局
答案 1 :(得分:15)
实现目标的最佳方法是使用http_build_query()
。
答案 2 :(得分:1)
来自CURLOPT_POSTFIELDS的http://www.php.net/manual/en/function.curl-setopt.php描述
要在HTTP“POST”操作中发布的完整数据。要发布文件, 使用@预先添加文件名并使用完整路径。文件类型可以是 通过跟随文件名中的类型明确指定 format'; type = mimetype'。此参数可以作为a传递 urlencoded字符串,如'para1 = val1&amp; para2 = val2&amp; ...'或作为数组 字段名称为键,字段数据为值。如果value是一个数组, Content-Type标头将设置为multipart / form-data。截至PHP 5.2.0,如果使用@前缀将文件传递给此选项,则value必须是数组。
答案 3 :(得分: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
答案 4 :(得分:0)
如果$ anarray是一个数组,我怀疑它是,它不应该是。通过连接或任何适当的方法将它变成一个字符串。
编辑:见Eric Butera的回答。