Shi
@Shi

Как правильно разобрать stdClass?

Добрый день. Не могу сообразить как нужно правильно сделать. Есть объект:
array(4) {
  [0]=>
  object(stdClass)#9 (3) {
    ["Meter"]=>
    object(stdClass)#10 (3) {
      ["Name"]=>
      string(11) "Г 54897665"
      ["ServiceName"]=>
      string(41) "ГВС (без полотенцесуш.)"
      ["ID"]=>
      string(36) "a66cd4f9-7582-11e7-80fc-000c2972382b"
    }
    ["Value"]=>
    float(34)
    ["ValueDate"]=>
    string(10) "2017-12-31"
  }
  [1]=>
  object(stdClass)#11 (3) {
    ["Meter"]=>
    object(stdClass)#12 (3) {
      ["Name"]=>
      string(11) "Г 54897665"
      ["ServiceName"]=>
      string(41) "ГВС (без полотенцесуш.)"
      ["ID"]=>
      string(36) "a66cd4f9-7582-11e7-80fc-000c2972382b"
    }
    ["Value"]=>
    float(54)
    ["ValueDate"]=>
    string(10) "2018-01-20"
  }
  [2]=>
  object(stdClass)#13 (3) {
    ["Meter"]=>
    object(stdClass)#14 (3) {
      ["Name"]=>
      string(11) "Г 54897665"
      ["ServiceName"]=>
      string(41) "ГВС (без полотенцесуш.)"
      ["ID"]=>
      string(36) "a66cd4f9-7582-11e7-80fc-000c2972382b"
    }
    ["Value"]=>
    float(54)
    ["ValueDate"]=>
    string(10) "2018-01-22"
  }
  [3]=>
  object(stdClass)#15 (3) {
    ["Meter"]=>
    object(stdClass)#16 (3) {
      ["Name"]=>
      string(9) "Х 130151"
      ["ServiceName"]=>
      string(6) "ХВС"
      ["ID"]=>
      string(36) "a66cd4fa-7582-11e7-80fc-000c2972382b"
    }
    ["Value"]=>
    float(71)
    ["ValueDate"]=>
    string(10) "2017-12-31"
  }
}


Как вывести все Value только ГВС? Или все ХВС? бьюсь 2 дня с циклами, и ни с места(
  • Вопрос задан
  • 438 просмотров
Решения вопроса 1
Maksclub
@Maksclub Куратор тега PHP
maksfedorov.ru

UPD: чутка поправил

// Выводим все ХВС
foreach($array as $obj)
{    
    if(strpos($obj->Meter->ServiceName, 'ХВС') !== false){
         echo($obj->Meter->ServiceName . PHP_EOL);
    }
}


// Выводим все ГВС
foreach($array as $obj)
{    
    if(strpos($obj->Meter->ServiceName, 'ГВС') !== false){
         echo($obj->Meter->ServiceName . PHP_EOL);
    }
}


UPD 2: Код писал прямо в редакторе, попробуйте... возможны ошибки...
но "ХВС" и "Г" может быть рандомным

// Получаем наши ГВС (или что-то рандомное из нашего массива)
function getValues($array, $value)
{
    $values = []; 
    foreach($array as $obj)
    {    
        if(strpos($obj->Meter->ServiceName, $value) !== false){
             $values[] = $obj->Meter->ServiceName;
        }
    }
    return $values;
}

// Получаем наши ГВС, где $metrics наш массив в вопросе
print_r(getValues($metrics, 'ГВС'));
print_r(getValues($metrics, '12ХВС'));
print_r(getValues($metrics, 'Что-то'));
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
villiwalla
@villiwalla
HTML-верстка
У тебя массив объектов а не объект.

$array = [......];
foreach($array as $obj => $key) {
echo $obj->$key;
if(is_object($obj->$key))  {
...цикл или рекурсия
}

}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы