Получить полезный массив из ответа curl, который отформатирован как массив php - PullRequest
3 голосов
/ 04 апреля 2010
$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 ]

4 голосов
/ 04 апреля 2010

Данные, которые вы получаете, вероятно, не массив, а строка, содержащая структуру массива, например вывод print_r(). Данные такого типа не автоматически преобразуются обратно в массив PHP.

Если вы можете управлять страницей, с которой вы запрашиваете это, закодируйте данные с помощью метода, такого как serialize () или json_encode () и на стороне запроса, декодируйте данные вы получаете из curl используя ( unserialize () или json_decode () ) соответственно. Эти функции дадут вам правильный массив PHP.

Если у вас нет способа изменить способ, которым URL-адрес выводит свои данные, я могу видеть только один способ (yuck!) С помощью eval () - я могу уточнить это, если это необходимо, но это действительно очень плохая идея.

2 голосов
/ 04 апреля 2010

Ваш $outputArray является строкой , которая, кажется, содержит что-то вроде результата print_r().

Нет способа, которым PHP может догадаться , что строка представляет массив - и это не совсем близко к синтаксису, который используется для объявления массива; так что это не сработает.


Решение будет:

  • чтобы изменить вызываемый вами удаленный скрипт, чтобы он возвращал строку, содержащую некоторые сериализованные данные
    • т.е. и массив, сериализованный с serialize
    • или с json_encode
  • И, с вашей стороны, десериализуйте данные, чтобы вернуть массив,
    • с любым unserialize
    • или json_decode
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...