Не удается выполнить итерацию по объекту в Ubuntu PHP 5.2.10-2 Работает на PHP 5.2.10?
-
13-09-2019 - |
Вопрос
С помощью этого кода я выполняю итерацию по объекту.
Работает:
- 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) { }
Недопустимый аргумент, указанный для foreach()
Решение
Возможно, на одном из ваших серверов включена функция magic_quotes_gpc, поэтому вы можете попробовать использовать косые черты в $_POST['data'] перед его декодированием.Обе версии PHP должны иметь возможность выполнять итерации по объектам.
Другие советы
Вы уверены, что у вас правильные версии 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");
и посмотрите, устранит ли это ошибку.
попробуйте сделать:
$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'];это не сработает.