Как реализовать фильтрацию по массиву данных без запроса к бд 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"]=> "Желтый"
      }
    }
  
}

Как лучше реализовать фильтрацию данных?


Ответы (0 шт):