我一直试图调试这个..我通过cURL将多维数组传递给另一个脚本,我想在传递curl执行后对该数组执行某些操作..但是它似乎在数组通过curl(至少是它的副本),原始数组搞砸了!
$myarray[0]['name'] = "TJ";
$myarray[0]['age'] = "21";
$myarray[0]['sex'] = "yes please";
printr($myarray); //outputs the array properly
//upload the array data as-is to central
// Get cURL resource
$curl = curl_init();
// Set some options for cURL
curl_setopt_array($curl, array(
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_URL => 'http://localhost/projects/sync_dtr.php?',
CURLOPT_USERAGENT => 'TK local code: blq ',
CURLOPT_POST => 1,
CURLOPT_POSTFIELDS => $myarray
));
// Send the request & save response to $resp
$response = curl_exec($curl);
// Close request to clear up some resources
curl_close($curl);
printr($myarray); //doesn't output the array properly, instead it outputs "Array ( [0] => Array ) "
这是一个错误还是预期的结果/效果?我不明白cURL如何编写/修改原始数组。即使我制作了$ myarray的副本,并在cURL中使用了一个副本,机器人副本也搞砸了!
但如果我不使用多维数组,一切似乎都没问题。
答案 0 :(得分:7)
内部发生的是每个顶部数组元素是turned into a string;遗憾的是,这是在不应用写时复制语义的情况下执行的。我不会把这个称为bug,但这绝对是不直观的。
尽管如此,CURLOPT_POSTFIELDS
不应该用于多维值;相反,请使用http_build_query()
:
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query(array(
'myarray' => $myarray
)));
顺便说一下,我确保顶级元素是一个字符串;这对于url编码的表单值是必要的。
答案 1 :(得分:2)
cURL只能接受一个简单的键值配对数组,其值为字符串 请参阅答案:Post multidimensional array using CURL and get the result on server
但是,我建议您将数组序列化为JSON String。然后在CURL Post的接收端,反序列化String。