2012-06-14 3 views
1

Я массив превращается в StdClass объект, как это,Получите значение вспомогательного массива без цикла дважды?

stdClass Object 
(
    [1339697186] => stdClass Object 
     (
      [1403873546800880] => stdClass Object 
       (
        [quantity_request] => 2 
        [time_created] => 1339697190 
        [variant] => stdClass Object 
         (
          [0] => 1403873546800887 
         ) 

       ) 

     ) 

    [1339697196] => stdClass Object 
     (
      [1403873546800880] => stdClass Object 
       (
        [quantity_request] => 1 
        [time_created] => 1339697196 
        [variant] => stdClass Object 
         (
          [0] => 1403889656952419 
         ) 

       ) 

     ) 

) 

Так что, если я хочу получить [quantity_request] каждого пункта, я петля дважды, чтобы получить ответ,

foreach ($items as $key => $item) 
{ 
    foreach ($item as $code => $item) 
    { 
     echo $item->quantity_request; 
    } 
} 

Я хочу знать, есть ли способ получить ответ следующим образом: без цикл массива объектов дважды?

foreach ($items as $key => $item) 
{ 
    # Get the product code of this item. 
    $code = $cart->search_code($key); 

    echo $item->$code->quantity_request; 
} 

ошибка:

Fatal error: Cannot use object of type stdClass as array in...

У меня есть метод в классе, чтобы получить код (ключ) к югу от содержимого массива объектов.

public function search_code($key) 
{ 
     # Get this item. 
     $item = $this->content[$key]; 

     # Get this item's sub key, which is the code of the product. 
     $subkeys = array_keys($item); 

     # Get the first item from the array. 
     $code = $subkeys[0]; 

     # Return the sub key which is the code of the product. 
     return $code; 
} 
+0

Примечание: ваше использование двух переменных $ элементов в двойном Еогеасп собирается вызвать проблемы. – ben

+2

@ben: Я не уверен, что это вызовет проблемы, я думаю, что затенение будет выполняться по назначению. Но я согласен с тем, что это смущает/неясно. – jedwards

ответ

0

Да, я знаю:

foreach ($items as $key => $item) 
{ 
    $array = (object) array_shift($item); 

    echo $array->quantity_request.'<br />'; 
} 

Я надеюсь, что ответ на ваш вопрос, не хорошо понимаю на 100%.

EDIT

<?php 
$items = (object) array(
    1339697186 => array(1403873546800880 => array('quantity_request' => 2)), 
    1339697187 => array(1403873546800880 => array('quantity_request' => 3)), 
    1339697188 => array(1403873546800880 => array('quantity_request' => 4)) 
); 

foreach ($items as $key => $item) 
{ 
    $array = (object) array_shift($item); 

    echo $array->quantity_request.'<br />'; 
} 
?> 

// Results : 
2<br />3<br />4<br /> 
+0

Просто примечание: это будет работать на каждом объекте верхнего уровня, имеющем ровно один объект второго уровня (как его выложил 'print_r'). Но если у него было несколько объектов второго уровня на объект верхнего уровня, он пропустил бы некоторые, тогда как его двухконтурное решение не будет. – jedwards

+0

@jedwards Да, я знаю. Но в этом примере я видел только одну запись на втором уровне, поэтому я догадался ... давайте посмотрим его ответ. –

+0

Чин Дэвид Бленджер за ответ. Я думаю, что это работает с вашим ответом. Благодаря! – laukok

Смежные вопросы