2015-03-24 5 views
0

Я надеюсь, что есть лучший способ возвращения значений из каждой cy_GB['value] и en_GB['value] из массива ниже:Возврат значения из многомерного массива PHP

MultilingualSelectAttributeTypeOptionList Object (
    [options:MultilingualSelectAttributeTypeOptionList:private] => Array 
     (
      [0] => MultilingualSelectAttributeTypeOption Object 
       (
        [error] => 
        [id] => 7 
        [values] => Array 
         (
          [cy_GB] => Array 
           (
            [id] => 13 
            [value] => Audio described 
           ) 

          [en_GB] => Array 
           (
            [id] => 14 
            [value] => Audio described 
           ) 

         ) 

        [th] => TextHelper Object 
         (
         ) 

       ) 

      [1] => MultilingualSelectAttributeTypeOption Object 
       (
        [error] => 
        [id] => 3 
        [values] => Array 
         (
          [cy_GB] => Array 
           (
            [id] => 5 
            [value] => BSL signed 
           ) 

          [en_GB] => Array 
           (
            [id] => 6 
            [value] => BSL signed 
           ) 

         ) 

        [th] => TextHelper Object 
         (
         ) 

       ) 

     ) 

    [error] => 
) 

Это то, что я пробовал. Я хотел бы также использовать более осмысленные имена .:

foreach ($selectedOptions as $row) { 

    foreach ($row as $key) { 

     foreach ($key as $k => $v) { 

      if($k == 'cy_GB') { 
       echo $v['value']; 
      } 

      if($k == 'en_GB') { 
       echo $v['value']; 
      } 

     } 

    } 

} 

Я знаю, что такого рода вещи было предложено много раз, так что я извиняюсь за это. любая помощь была бы наиболее оценена.

+2

выглядит как частная собственность, имеет ли этот объект метод геттера? – Ghost

+0

Не то, что я знаю, я могу получить значения с тем, что я пробовал, просто интересно, есть ли лучший способ сделать это? –

+0

вы написали '$ v ['value']', но print_r указывает '[values]' – ITroubs

ответ

2

Что-то подобное может работать:

function findKeyRec($obj, $search) { 

    if(!is_array($obj) && !$obj instanceof Traversable) return; 

    foreach($obj as $key => $value) { 
    if($key == $search) { 
     echo $value['value']; 
    } else { 
     findKeyRec($value, $search); 
    } 
    } 
} 

findKeyRec($ar, 'cy_GB'); 
findKeyRec($ar, 'en_GB'); 

Это не короче, но, на мой взгляд, более элегантно, и он должен работать с любой структурой объекта/массива.

Непрошеным.

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