从curl响应中获取可用的数组,该响应被格式化为php数组

时间:2010-04-04 13:39:15

标签: php arrays curl multidimensional-array

$ch = curl_init("url");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "test"); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$outputArray = curl_exec($ch);

然后$ outputArray将包含:

Array
(
[0] => Array
    (
        [r1] => test response
        [r2] => 4
        [r3] => 32
    )

)

所以我认为PHP可以看到它是一个数组并对其进行处理,但当我做类似的事情时

echo $outputCode[0][r_title]."\n";

它出错了:

PHP Fatal error:  Cannot use string offset as an array in /www/test.php on line 75 

(第75行是上面的回声)

我做错了什么?

2 个答案:

答案 0 :(得分:4)

您获得的数据可能不是数组,而是包含数组结构的字符串,例如由print_r()输出。这种数据将自动转换回PHP数组。

如果您可以控制要查询的页面,请使用serialize()json_encode()之类的方法对数据进行编码,并在查询方面使用({{}解码从curl获取的数据分别为3}}或unserialize())。这些函数将为您提供正确的PHP数组。

如果你无法改变URL输出数据的方式,我可以看到的唯一方法就是(哎呀!)使用json_decode() - 如果需要,我可以详细说明,但它确实是真的坏主意。

答案 1 :(得分:2)

您的$outputArray 是字符串,似乎包含类似print_r()的输出。

PHP无法猜测该字符串代表一个数组 - 并且它并不真正接近用于声明数组的语法;所以这不起作用。


解决方案是:

  • 修改您正在调用的远程脚本,因此它返回一个包含一些序列化数据的字符串
    • 即。和数组,用serialize
    • 序列化
    • json_encode
  • 并且,在您这边,反序列化数据,以恢复数组,
    • 使用unserialize
    • json_decode