Не можете перебрать объект в Ubuntu PHP 5.2.10-2 Работает на PHP 5.2.10? - PullRequest
0 голосов
/ 07 декабря 2009

С этим кодом я перебираю объект.

Работает:

  • Windows с WAMP и PHP 5.2.9
  • Веб-сервер Linux с PHP 5.2.10

Это не работает на моем рабочем столе:

  • Ubuntu 9.10 с PHP 5.2.10-2 от репо
$incomingData = json_decode($_POST['data']);

foreach($incomingData as $key => $action)
{

}

Указан неверный аргумент для Еогеасп ()

Ответы [ 3 ]

3 голосов
/ 07 декабря 2009

Возможно, на одном из ваших серверов включена функция magic_quotes_gpc, поэтому вы можете попробовать использовать полоски в $ _POST ['data'] перед тем, как декодировать его. Обе версии PHP должны иметь возможность перебирать объекты.

2 голосов
/ 07 декабря 2009

Вы уверены, что у вас есть правильные версии PHP?

Из документации на foreach:

Начиная с PHP 5, возможна итерация объекты тоже.

Попробуйте использовать json_decode со вторым аргументом, установленным на true, чтобы json_decode возвращал ассоциативные массивы, а не объекты.

$incomingData = json_decode($_POST['data'], true);

Где второй аргумент, $assoc (по умолчанию false) означает:

Когда TRUE, возвращаемые объекты будут преобразованы в ассоциативные массивы.

Я предполагаю, что в одной коробке меньше, чем в PHP 5.

Чтобы подтвердить, что это проблема, попробуйте изменить $incomingData на какой-нибудь безобидный ассоциативный массив:

$incomingData = array("foo" => "bar", "baz" => "monkey");

и посмотрите, устранит ли это ошибку.

0 голосов
/ 07 декабря 2009

попробуйте сделать:

$data_array = get_object_vars(json_decode($json_data));

print_r($data_array);

this is only if you obtain information from some web page such as

$data = file_get_contents('http://www.someurl.com/somerestful_url/');
$data_array = get_object_vars(json_decode($data));
print_r($data_array);

также вы, вероятно, пытались сделать json_encode, но вместо этого поместили json_decode ($ _ POST ['data']);

если у вас нет строки json внутри $ _POST ['data']; это не сработает.

...