В php записать значение в массив при Foreach
Нужно из массива получить номер рабочего счетчика и дату, а также вывести на экран, например, первое значение.
$homepage_decode = json_decode($homepage, true);
$number= array();
$last_reading_date =array();
foreach ($homepage_decode['data'][2] as $i){
foreach ($i as $i1){
if ($i1['state'] === 'Действует' and ($i1['meterType'] === 'hotWater' or $i1['meterType'] === 'coldWater') ) {
$number = $i1['serialNumber'];
$last_reading_date = $i1['lastReadingDate'];
$last_reading_date = preg_replace('(0:00:00)', ' ', $last_reading_date);
print_r('Номер: '.$number[0].' Дата: '.$last_reading_date[0]. '</br>');
} } }
Это работает только если выводить сразу все значения print_r('Номер: '.$number.' Дата: '.$last_reading_date. '</br>');
В чем ошибка?
Массив:
{
"dataType": "data_for_bot",
"data": [
{
"balance": 657.26
},
{
"fullName": «Сидоров И.П.»
},
{
"metersData": [
{
"serialNumber": "738362",
"state": "Действует",
"lastReadingDate": "28.02.2022 0:00:00",
"meterType": "hotWater",
},
{
"serialNumber": "00507723",
"state": "Не действует",
"lastReadingDate": "30.06.2021 0:00:00",
"meterType": "hotWater",
},
{
"serialNumber": "8091855",
"state": "Не действует",
"lastReadingDate": "26.07.2019 0:00:00",
"meterType": "hotWater",
},
{
"serialNumber": "00505818",
"state": "Действует",
"lastReadingDate": "27.01.2022 0:00:00",
"meterType": "coldWater",
},
{
"serialNumber": "01538380",
"state": "Действует",
"lastReadingDate": "18.05.2022 0:00:00",
"meterType": "electricity",}]}]}
Ответы (2 шт):
Автор решения: Pr0gramm1st
→ Ссылка
Если вам необходимо вывести только одно значение, то можно вот так попробовать: перед циклом объявить переменную
$rabochiy_schetchik_i_data = [];
$schetchik_cikla = 1;
в цикле при условии (если первый элемент):
if ($schetchik_cikla == 1) {
$rabochiy_schetchik_i_data ["counter"] = $number[0];
$rabochiy_schetchik_i_data["date"] = $last_reading_date[0];
} $schetchik_cikla ++; //инкрементируем счётчик там, где нам нужно. В данном случае - перед закрывающей цикл фигурной скобкой
И вне цикла:
print_r("Номер:" . $rabochiy_schetchik_i_data["counter"] . " Дата:" . $rabochiy_schetchik_i_data["date"]);
Автор решения: Виктор Карев
→ Ссылка
Если я правильно понял фразу "Мне нужно будет регулярно обращаться то к 1, то к 2, то к 3 значению вне цикла", то
$homepage_decode = json_decode($homepage, true);
$number = 2; // Здесь указываем, что нам нужен второй рабочий счётчик
$counter = false; // Сюда будем писать счётчик, если найдём
$n = 0; //
foreach ($homepage_decode['data'][2] as $i){
foreach ($i as $i1){
if ($i1['state'] === 'Действует' and ($i1['meterType'] === 'hotWater' or $i1['meterType'] === 'coldWater') ) {
if (++$n == $number) { // проверяем номер счётчика
$counter = $i1;
break;
}
}
}
}
if ($counter) { // если счётчик найден, то выводим.
$number = $counter['serialNumber'];
$last_reading_date = $counter['lastReadingDate'];
$last_reading_date = preg_replace('(0:00:00)', ' ', $last_reading_date);
echo 'Номер: ' . $number . ' Дата: ' . $last_reading_date . '</br>';
}