Могу ли я получить конкретное значение JSON по идентификатору?

0

Я хотел бы, чтобы соответствующая дата typeId: 11 выводилась из следующего JSON. Порядок typeId всегда разный, поэтому не всегда получается, например, всегда обращаться ко второму значению.

    {
    "page": 1,
    "totalsCount": 1,
    "isLastPage": true,
    "lastPageNumber": 1,
    "firstOnPage": 1,
    "lastOnPage": 1,
    "itemsPerPage": 50,
    "entries": [
        {
            "id": 60132,
            "statusName": "GIT",
            "dates": [
                {
                    "orderId": 60132,
                    "typeId": 7,
                    "date": "2021-06-03T00:00:00+02:00"
                },
                {
                    "orderId": 60132,
                    "typeId": 11,
                    "date": "2021-05-28T00:00:00+02:00"
                },
                {
                    "orderId": 60132,
                    "typeId": 16,
                    "date": "2021-05-27T20:20:28+02:00"
                },
                {
                    "orderId": 60132,
                    "typeId": 2,
                    "date": "2021-05-27T20:19:21+02:00"
                },
                {
                    "orderId": 60132,
                    "typeId": 4,
                    "date": "2021-06-03T15:16:14+02:00"
                }
            ]
        }
    ]
}

С моим подходом пока я не получаю никакого результата:

$json = file_get_contents($orders);
$arr = json_decode($orders);
foreach($arr->entries as $order => $value) {

echo '<th scope="row">' . $value->dates->[typeId='11'].date . '</th>';
}

В чем моя ошибка?

  • 0
    Вы не можете получить значения из такого массива или объекта. Вам нужно будет перебирать даты, чтобы найти подходящую недвижимость.
  • 0
    Что такое $ value? Я бы подумал о рассмотрении некоторых ранее заданных вопросов о том, как анализировать или перебирать массив JSON.
  • 0
    Извините, я добавил информацию к вопросу.
Теги:
CodeFix

3 ответа

0
Лучший ответ

Вы могли бы использовать array_map() :

<?php
$arr = json_decode($json, true);
$result = array_filter(
    array_map(
        function ($record) {if($record['typeId'] == 11) return $record['date'];}, $arr['dates']
    )
);

использовать array_filter() для удаления пустых значений из набора результатов.

рабочая демонстрация

РЕДАКТИРОВАТЬ

С обновленной информацией json вы можете использовать:

$obj = json_decode($json);
foreach($obj->entries[0]->dates as $order => $value) {
    if($value->typeId == 11) echo '<th scope="row">' . $value->date . '</th>';
}

рабочая демонстрация

Поделиться
Источник
  • 0
    Выглядит неплохо, но на самом деле у меня это не работает .. Мой код: 3v4l.org/AkIcC
  • 0
    обновлено, исправлено
  • 0
    Спасибо, все заработало! Но одна небольшая проблема в моем коде: записи [0] показывают мне только значение в первом порядке. Поэтому во втором заказе не указана дата доставки. Можете ли вы показать записи в возрастающем порядке по количеству? записи [0], записи [1], записи [2] ... и т. д.?
  • 0
    Рад, что это работает! Это отвечает на вопрос: «Могу ли я получить конкретное значение JSON по идентификатору?» . Ваш последующий вопрос «показать записи в возрастающем порядке по количеству» должен быть опубликован как новый вопрос с указанием ваших наилучших попыток решить вашу проблему и любых проблем, с которыми вы столкнулись при решении.
0

Посколькуdates - это массив, который нужно перебирать и отфильтровывать нужные элементы с помощьюtypeId .

Что-то вроде этого:

dates.filter(({typeId}) => typeId === 11).shift().date

Поделиться
Источник
  • 0
    Что ж ... это, очевидно, вопрос, связанный с PHP, и поэтому это не ответ PHP.
0

Для такой ситуации я обычно пишу такую простую функцию:

function getDate(array $dates, $typeId) {
    foreach ($dates as $date) {
        if ($date['typeId'] === $typeId) {
            return $date;
        }
    }
    return null;
}
Поделиться
Источник

Другие вопросы

CodeFix
Цитата дня

"Завидую тестировщикам: все хотят с ними дружить."

Эндрю Таненбаум