В настоящее время у меня есть файл json, содержащий информацию о транспортном средстве:
{
"Inventory": [{
"id": "1",
"StockNumber": "1000",
"Make": "Ford",
"Model": "Mustang",
"Trim": "GT",
"Year": "2011",
"Color": "Red",
"Cylinders": "8",
"Transmission": "Manual"
}, {
"id": "2",
"StockNumber": "1001",
"Make": "Ford",
"Model": "Mustang",
"Trim": "GT",
"Year": "2012",
"Color": "Yellow",
"Cylinders": "8",
"Transmission": "Automatic"
}, {
"id": "3",
"StockNumber": "1002",
"Make": "Chevy",
"Model": "Camaro",
"Trim": "ZL1",
"Year": "2020",
"Color": "Red",
"Cylinders": "8",
"Transmission": "Manual"
}]
}
Я пытаюсь установить флажки для фильтрации результатов по марке, модели, году, цвету и т. Д. c ... На странице выбора я получаю значение флажков и передаю его на страницу поиска php. Это массив, который передается на страницу поиска.
['Model' => ['Mustang', 'Camaro'], 'Color' => ['Red']];
Это должно вернуть 2 результата: красный Mustang и красный Camaro.
Если я использую array_filter
, после выбора Ford автомобили Chevy будут отфильтрованы. Так что я могу выбрать Ford и Red, я бы получил один результат, как и ожидал. Однако сейчас я не могу выбрать Chevy, так как он был отфильтрован. Поэтому я не вижу красных автомобилей Ford и Chevy. Я получаю один результат - красный Mustang.
Если я попытаюсь добавить автомобили в массив результатов с помощью array_pu sh, я могу добавить Ford и Chevy, но выбор красного цвета не отфильтрует желтый Mustang, потому что желтый Мустанг - это Форд, и он соответствует этим критериям. Я получаю 3 результата: 1 красный Mustang, 1 желтый Mustang и 1 красный Camaro.
Я борюсь с logi c, чтобы отфильтровать результаты json, используя переданный массив. Кажется Мне нужно "or"
несколько переданных марок и "and"
в каждой категории. Форд ИЛИ Шевроле И Красный. Другим примером может быть: Ford ИЛИ Chevy И Красный ИЛИ Желтый И Руководство.
Я обновил код на основе ответа ниже:
$make = ['Mustang', 'Camaro'];
$color = ['Red'];
$result = [];
foreach ($dataSource as $k => $data) {
foreach ($posts as $postKey => $postValue) {
// This does not. Only filters on last array in loop
if (array_key_exists($postKey, $data) && in_array($data[$postKey],
$postValue)) {
$result[$k] = $data;
} else {
unset($result[$k]);
}
}
}
}
Как мне отфильтровать этот массив на основе критерии массива динамически таким образом, чтобы пример stati c работал?