【问题标题】:Get usable array from a curl response, which is formatted as a php array从 curl 响应中获取可用数组,格式为 php 数组
【发布时间】:2011-02-04 04:42:16
【问题描述】:
$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 行是上面的回声)

我做错了什么?

【问题讨论】:

    标签: php arrays curl multidimensional-array


    【解决方案1】:

    你得到的数据可能不是一个数组,而是一个包含数组结构的字符串,例如由print_r() 输出。此类数据不会自动转换回 PHP 数组。

    如果您可以控制从中查询的页面,请使用 serialize()json_encode() 等方法对数据进行编码,在查询方面,使用(unserialize() 或 @987654324 对从 curl 获得的数据进行解码@) 分别。这些函数将为您提供正确的 PHP 数组。

    如果您无法更改 URL 输出其数据的方式,我能看到的唯一方法是(糟糕!)使用 eval() - 如果需要,我可以详细说明,但这是一个非常糟糕的主意.

    【讨论】:

    • 好的,是的,我更改了我正在查询的页面 :) 谢谢。
    【解决方案2】:

    您的$outputArray一个字符串,它似乎包含类似于print_r() 的输出。

    PHP 无法猜测该字符串表示一个数组——而且它与用于声明数组的语法并不十分接近;所以这行不通。


    一个解决方案是:

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

    【讨论】:

    • 如果我们有伟大的头脑(嗯,那将是个好消息,不是吗?),那么,是的,他们有 ;-)
    • 我想给你们两个“打勾”,因为两个答案都同样正确,但遗憾的是我做不到。
    • Boah,别担心 :-) 重要的是你得到了一个(嗯,两个 ^^ )答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多