2009-10-25 3 views
2

Сценарий:PHP StdClass вопрос

$x = json_decode($x); 
foreach ($x as $item) 
{ 
    $info[] = $item; //ERROR 
} 

Я зацикливание хотя DataFeed, чтобы получить данные. Я хочу добавить элементы в объект stdClass в цикле. Как мне это сделать? Я не так хорошо знаком с stdobj's.

ответ

5

Если вы ожидаете, что json_decode возвращает массив, вы можете сделать следующее:

$x = json_decode($x, true); // returns associative array instead of object 
$info = (object) $x; 

Более подробную информацию и примеры можно найти here.

+0

Могу ли я указать, что вы бросаете объект в объект? Это не очень полезно. – deceze

+0

Хорошая добыча! Исправлен код, чтобы он возвращал массив вместо объекта. – Pras

4

Если вы правильно поняли, вы должны просто следить за регулярным синтаксисом объекта, чтобы получить желаемый результат. Добавить необязательный второй параметр для json_decode набора для true, чтобы получить JSON декодируются как ассоциативный массив, как это кажется, как будто это форма, которую вы используете его.

$info = new stdClass(); 
$x = json_decode($x, true); 
foreach ($x as $key => $val) { 
    $info->$key = $val; 
} 

Как Игнас отметил, однако, результаты json_decode() уже возвращаются как объект stdClass, поэтому, если вы только что использовали $x = json_decode($x), вам не понадобится $info ... у вас уже есть $x как объект stdClass.

1

SPLArrayObject давайте используем тот же синтаксис, который генерирует ошибку в вашем примере. Это предусмотрено, что у вас есть возможность использовать ArrayObject вместо stdClass.