2015-06-10 3 views
0

Как получить значение Bar Foo?Как получить значение смешанного массива и объектов

Array 
(
    [channel] => SimpleXMLElement Object 
     (
      [item] => Array 
       (
        [0] => SimpleXMLElement Object 
         (
          [title] => Bar Foo 
         ) 
       ) 
     ) 
) 
echo $sxml['channel']->item[$i]->title; 

Это дает результат, но Примечание: Попытка получить имущество не-объект

+5

«Это дает результат, но с уведомлением« ... какое уведомление? – Khalid

+1

Должно быть что-то вроде '$ sxml [0] ['channel']' – cybersoft

+0

@Khalid Примечание: попытка получить свойство не объекта – saravanabawa

ответ

0

Если ваш объект структурирована следующим образом: (объект> массив> объект> массив), то вы звоните индексы/ключи ошибочны. Обратите внимание на следующий пример:

$x = new stdClass(); 
$x->channel = array(); 
$y = new stdClass(); 
$y->title = "Bar Foo"; 
$x->channel[0] = $y; 
//echo $x['channel']->item[$i]->title; 
//// Fatal error: Cannot use object of type stdClass as array 
echo $x->channel[0]->title; 
//// Success 

Но если это структурировано так, как вы описываете, то ваша эхо линия дает мне правильный вывод (смотри ниже), так что вы, вероятно, создать массив или объект, где-то, что не правильно сопоставьте то, что вы описали в приведенном выше псевдокоде.

$x = array(); 
$x['channel'] = new stdClass(); 
$x['channel']->item = array(); 
$x['channel']->item[0] = new stdClass(); 
$x['channel']->item[0]->title = "Bar Foo"; 
echo $x['channel']->item[0]->title; 

На стороне записки, если вы обнаружите, что вам нужно «знак доллара» сложные структуры (например, динамические имена переменных, включающих индексы массива), вы можете сделать это, используя фигурные скобки, как это:

$x = 2; 
$y = array("x"=>$x); 
print $($y['x']); 
Смежные вопросы