У меня есть эти данные JSON, и я использую этот код, чтобы соответствовать заголовку. Это работает, но теперь я хочу сделать еще один шаг и перечислить все продукты, которые меньше некоторой цены, или больше, чем какая-то цена, или равны некоторой цене.
$json = '[{
"id": 2042049298481,
"title": "Test Product 53",
"variants": [{
"id": 15733087797297,
"title": "Default Title",
"price": "100.00",
"sku": "no"
}]
}, {
"id": 2196682342449,
"title": "its test yar",
"variants": [{
"id": 16385289879601,
"title": "Default Title",
"price": "144.00",
"sku": "no"
}]
}, {
"id": 4175970041905,
"title": "uhjkjhkhk",
"variants": [{
"id": 30302326554673,
"title": "Default Title",
"price": "1000.00",
"sku": "10"
}]
}, {
"id": 4183828791345,
"title": "kaminsss",
"variants": [{
"id": 30346449518641,
"title": "Default Title",
"price": "111.00",
"sku": "no"
}]
}, {
"id": 4247884890161,
"title": "hellooo",
"variants": [{
"id": 30579860832305,
"title": "Default Title",
"price": "1111.00",
"sku": "no"
}]
}, {
"id": 4248143822897,
"title": "10oct latest collection",
"variants": [{
"id": 31157780938801,
"title": "50",
"price": "111.00",
"sku": "no-1"
}, {
"id": 31157802270769,
"title": "60",
"price": "101.00",
"sku": ""
}, {
"id": 31157804761137,
"title": "70",
"price": "111.00",
"sku": ""
}]
}, {
"id": 4284600746033,
"title": "18oct2019",
"variants": [{
"id": 31595410030641,
"title": "120 / black",
"price": "100.00",
"sku": "10"
}]
}, {
"id": 4285596860465,
"title": "test2222",
"variants": [{
"id": 30877916921905,
"title": "Default Title",
"price": "111.00",
"sku": "no"
}]
}]';
$array = json_decode($json,1);
$filter_name ='title';
$filter_value ='Test';
$expected88 = array_filter($array, function($el) use ($filter_value, $filter_name) {
return ($el[$filter_name] >= $filter_value);
});
echo json_encode($expected88,true);
Это работает безупречно для title
, но мы хотим фильтровать на основе variant price
. Для одного варианта может быть несколько цен, и если $filter_value
больше, равно или меньше, может возникнуть любая.
Например, пользователь может искать продукт, минимальная цена которого составляет 50, поэтому в этом случае, если какой-либо вариант соответствует критериям, он будет перечислять эти продукты, или пользователь может искать, чтобы цены всех вариантов были меньше 50.
Мы пробовали так
$expected = array_filter($array, function ($var) use ($filter_value) {
return ($var[$filter_name] >= $filter_value);
});
но это не сработало. Мы пробовали foreach
и тестировали снова, но всегда давали пустой результат
$filter_name
для цены, а также как функция должна использовать его, если он не передан? - person Nigel Ren   schedule 18.03.2020$filter_name
по цене? - person Nigel Ren   schedule 18.03.2020