private function filter(array $containerData, array $whereExpression, array $withCondition)
    {
        $data = array_filter($containerData, function ($item) use ($whereExpression, $withCondition) {
            foreach ($item as $field => $value) {
                if (!$this->arrayFilter($value, $field, $whereExpression, $withCondition)) {
                    return false;
                }
            }
    
            return true;
        });

        if ($this->_order !== null) {
            ArrayHelper::multisort($data, $this->_order['keys'], $this->_order['directions']);
        }
    
        if ($this->_offset !== null) {
            $data = array_slice($data, $this->_offset, null, true);
        }
    
        if ($this->_limit !== null) {
            $data = array_slice($data, 0, $this->_limit, true);
        }
        
        return $data;
    }