PHP stdClass вопрос - PullRequest
       17

PHP stdClass вопрос

2 голосов
/ 25 октября 2009

Сценарий:

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

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

Ответы [ 3 ]

5 голосов
/ 25 октября 2009

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

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

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

4 голосов
/ 25 октября 2009

Если я вас правильно понимаю, вы должны просто следовать обычному синтаксису объекта, чтобы получить желаемый результат. Добавьте необязательный второй параметр к 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 голос
/ 25 октября 2009

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

...