2015-12-08 2 views
0

У меня проблема: Я выполняю итерацию через массив действительных объектов, используя foreach. При попытке получить доступ к результирующим объектам или их свойствам я получаю уведомление, что я пытаюсь получить доступ к не-объекту.PHP Попытка получить свойство не-объекта для действительного объекта

Вот код:

$schema = json_decode($_POST['d']); 
foreach ($schema->node as $node) { 
    var_dump($node); 
    if ($node->status == 1) { 
     $data = $node->id; 
    } 
} 

var_dump выводит следующее:

object(stdClass)#5 (6) { 
    ["status"]=> 
    int(0) 
    ["id"]=> 
    int(1) 
    ["title"]=> 
    string(6) "Sensor" 
    ["script"]=> 
    string(24) "from eZness import swag;" 
    ["x"]=> 
    int(60) 
    ["y"]=> 
    int(80) 
} 

Спасибо заранее.

UPDATE:

$schema = json_decode($_POST['d']); 
foreach ($schema->node as $node) { 
    var_dump($node); 
    echo $node->status; //Funnily this works 
    $status = $node->status; //while this doesn't 
    if ($node->status == 1) { //and this doesn't as well 
     $data = $node->id; 
    } 
} 

Но при удалении var_dump даже эхо больше не работает.

ОБНОВЛЕНИЕ: Решено. Если посмотреть на клиентскую часть приложения, возникла проблема с нажатием значений NULL в массиве $ schema-> node, которые, конечно же, не являются объектами.

+0

@MinaAbadir прав, вас 'Отсутствует свойство data в вашем объекте JSON с php'ed. В противном случае вы не добавляете нужный объект данных, к которому вы обращаетесь, ... –

+0

, но после этого '$ node' был правильно сброшен, поэтому' $ schema' должно быть хорошо. Вероятно, это подмножество кода отлично. –

+0

1) Пожалуйста, покажите нам свое полное сообщение об ошибке, которое вы получите. 2) Является ли ваш код только циклом 1 итерации? Или у вас есть больше объектов, и вы смотрите на неправильный. 3) Также, если вы делаете 'var_dump();' пожалуйста, возьмите вывод из исходного кода и опубликуйте его здесь. – Rizier123

ответ

0

Вы пытаетесь получить доступ к $node->data, которого не существует.

+0

Он существует, он является частью входящего JSON Строка. –

+0

Это не напечатано в var_dump. –

+2

Это приведет к уведомлению об «неопределенном свойстве», а не о «не-объекте». – lafor

0

Возможно, более обходной путь, чем ответ, но: использовать

$schema = json_decode($_POST['d'],true); 

When you pass true as the second parameter, you get back an associative array instead of an object.

Вы должны быть в состоянии петли через него с этим:

 $schema = json_decode($_POST['d'],true); 
foreach ($schema['node'] as $node) { 
    if ($node['status'] == 1) { 
     $data = $node['id']; 
    } 
} 
Смежные вопросы