Как реализовать фильтрацию по массиву данных без запроса к бд php?
Есть 2 параметра и список позиций, которые необходимо отфильтровать согласно выбранным параметрам.
Логика такая:
return array_values(
array_filter(
$items,
function ($item) use ($params) {
$paramsOne = $item->getParamsOne();
$paramsTwo = $item->getParamsTwo();
if(isset($params['param1']) && !isset($params['param2'])) {
foreach ($paramsOne as $param) {
if ($param->getId() === $params['param1']) {
return true;
}
}
}
if(isset($params['param2']) && !isset($params['param1'])) {
foreach ($paramsTwo as $param) {
if ($param->getId() === $params['param2']) {
return true;
}
}
}
if(isset($params['param2']) && isset($params['param1'])) {
foreach ($paramsTwo as $paramTwo) {
foreach ($paramsOne as $paramOne)
if ($paramTwo->getId() === $params['param2'] && $paramsOne->getId() === $params['param1']) {
return true;
}
}
}
return false;
}
)
);
Массив $items:
{
[0]=>
object(Item){
["id"]=> "1"
["name"]=> "Помидор"
["paramOne"]=>
array(1) {
[0]=>
object(ParamOne){
["id"]=> 2
["name"]=> "Овощь"
}
}
["paramTwo"]=>
array(1) {
[0]=>
object(ParamTwo){
["id"]=> 1
["name"]=> "Красный"
}
}
[1]=>
object(Item){
["id"]=> "2"
["name"]=> "Банан"
["paramOne"]=>
array(1) {
[0]=>
object(ParamOne){
["id"]=> 1
["name"]=> "Фрукт"
}
}
["paramTwo"]=>
array(1) {
[0]=>
object(ParamTwo){
["id"]=> 2
["name"]=> "Желтый"
}
}
}
Как лучше реализовать фильтрацию данных?