You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中使用CURL传递数组失败,接收端仅获"Array"字符串?

问题分析与解决方案

嘿,我一眼就看出问题所在了——你用curl POST嵌套数组的方式不对,导致接收端无法正确解析内层数组!

为什么会得到string(5) "Array"?

当你给CURLOPT_POSTFIELDS传入包含嵌套数组的$post时,PHP会默认把数据编码成application/x-www-form-urlencoded格式(也就是普通表单提交的格式)。但这种格式不支持嵌套数组,PHP会直接把内层的$items数组转成字符串"Array",这就是你接收端看到的结果。

两种解决方案

方案一:用JSON格式传输(推荐,适合复杂数据结构)

JSON是处理嵌套数据的标准格式,能完美保留数组结构:

发送端代码修改:

$items[] = array("sku"=>"data","name"=>"data","amount"=>0,"qty"=>"0","id"=>"data","price"=>0,"url"=>"data"); 
$post = array( 'data' => 'data', 'items' => $items);

// 将数组转为JSON字符串
$postJson = json_encode($post);

$ch = curl_init('urltopost'); 
curl_setopt($ch, CURLOPT_POST, true); 
// 传入JSON字符串作为POST内容
curl_setopt($ch, CURLOPT_POSTFIELDS, $postJson); 
// 设置请求头为JSON格式
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
curl_setopt($ch, CURLOPT_TIMEOUT, 3); 

header('Content-Type: text/html'); 
$response = curl_exec($ch); 
echo $response;

// 检查错误
if(curl_errno($ch)) { 
    header('Location: error'); 
    die(); 
} 
// 别忘了关闭curl资源,避免泄漏
curl_close($ch);

接收端代码修改:
因为$_POST只处理表单编码的数据,所以要读取原始请求体并解析JSON:

$postData = json_decode(file_get_contents('php://input'), true);
var_dump($postData["items"]); // 现在就能正确输出嵌套数组了

方案二:用http_build_query处理数组(仅适合简单嵌套场景)

如果一定要用表单编码格式,可以用http_build_query把数组转成符合表单规范的字符串,接收端就能正确解析为数组:

发送端修改:

// 把$post数组转成表单编码字符串
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post));

接收端无需修改,直接用var_dump($_POST["items"])就能拿到正确的数组。不过这种方式对多层嵌套的复杂数组支持有限,不如JSON可靠。

内容的提问来源于stack exchange,提问作者HTMLGuru

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 04:12:40