2010-01-24 3 views
1

Следующий код:Проблема получения значения из нескольких тускло-массива

 $options = $value[$i]['options']; 
     print_r($options); 

выводит следующий результат:

Array ( 
    [0] => stdClass Object ( 
     [id] => 1 
     [field_id] => 1 
     [option_name] => I'm a normal user) 
    [1] => stdClass Object ( 
     [id] => 2 
     [field_id] => 1 
     [option_name] => Store owner) 
    [2] => stdClass Object ( 
     [id] => 3 
     [field_id] => 1 
     [option_name] => Brand owner) 
    [3] => stdClass Object ( 
     [id] => 4 
     [field_id] => 1 
     [option_name] => Designer) 
) 

Так почему я не могу вывести «Я обычный пользователь» используя echo $options[0]["option_name"]?

Мой план для вывода id и option_name с использованием цикла Еогеасп:

foreach ($options as $option) 
    { 
    echo "<option value='".$option["id"]."'>".$option["option_name"]."</option>"; 
    } 

Это должно быть легко .... но я шарить :(

ответ

3

Второго уровень не является массив, а объект. Это было бы правильно:

$options[0]->option_name 
+0

Ahm thanks. Вы получаете очки, так как вы, где первый ответит :) – Steven

3

Попробуйте использовать это в Еогеасп

$option->option_name; 
$option->id; 

$options на самом деле объект. Вот почему вы видите это экземпляр stdClass. Каждое значение в этом классе доступ через аксессуар ->.

Кстати, вы можете получить доступ к нему регулярно, как это:

$options[0]->option_name; 
$options[0]->id; 
0

Имейте в виду, если вы назначаете одну из этих значений в новую переменную, вы получаете объект, а не строки. Вы можете исправить, что делать что-то вроде этого:

$string = (string)$options[0]->option_name; 

Это не является проблемой, если вы просто выводя путь ваш пример показывает, но будет иметь значение больше, если бы вы использовали значение, как, скажем, массив. Пример:

$array[$options[0]->id] == $array[1]; // FALSE!! 
$array[(string)$options[0]->id] == $array[1] // True. 
Смежные вопросы