Как правильно сделать «ФИЛЬТР» на странице товара?

Здравствуйте!

Пытаюсь сделать некий фильтр или переключатель товаров прям на странице товаров.
Что мы имеем:
$current - Выбранный товар.
$props - Массив с параметрами по которым проверять.
$result - Массив с товарами.

//    print_r($current); // Выбранный товар
//    Array
//    (
//        [diametr] => 8
//        [coating] => 15
//    )

//    print_r($props); // Массив с параметрами по которым проверять. Может быть больше двух параметров.
//    Array
//    (
//        [0] => diametr
//        [1] => coating
//    )

// От этого хочу избавиться $prop1, $prop2 и т.д.
$prop1 = $props[1]; // Покрытие
$prop2 = $props[0]; // Диаметр

foreach ($result as $id => $resultItem) {

//    print_r($resultItem);

//    [id] => 2
//    [title] => Фланцевая гайка
//    [url] => /catalog/flantsevaya_gayka/
//    [image] => /images/flantsevaya_gayka.jpg
//    [price] => 38 ₽
//    [diametr] => Array
//        (
//            [id] => 8
//            [value] => M6
//        )
//    [coating] => Array
//        (
//            [id] => 15
//            [value] => Нержавеющая сталь
//        )

    if ($resultItem[$prop1]["id"] == $current[$prop1]) {

        $arr_offers[$prop2]["options"][$resultItem[$prop2]["id"]] = [
            "id"       => $resultItem[$prop2]["id"],
            "value"    => $resultItem[$prop2]["value"],
            "url"      => $resultItem["url"],
            "selected" => $resultItem[$prop2]["id"] == $current[$prop2] ? "Y" : "N"
        ];
    }

    if ($resultItem[$prop2]["id"] == $current[$prop2]) {

        $arr_offers[$prop1]["options"][$resultItem[$prop1]["id"]] = [
            "id"       => $resultItem[$prop1]["id"],
            "value"    => $resultItem[$prop1]["value"],
            "url"      => $resultItem["url"],
            "selected" => $resultItem[$prop1]["id"] == $current[$prop1] ? "Y" : "N"
        ];
    }
}


Что мы делаем в первом случае. Проверяем у элемента массива и у текущего товара параметр "Покрытие", если он совпадают, то заполняем массив для параметра "Диаметр", для параметра "Покрытие" делаем наоборот. На выходе имеем массив $arr_offers.

Массив собирается верно, но сама реализация ну прям можно лучше сделать, опыта не хватает!

Во-втором случае пытался проверить так, на выходе массив не тот, что нужен.
foreach ($result as $id => $resultItem) {
    foreach ($props as $propKey => $propCode) {
        if ($resultItem[$propCode]["id"] == $current[$propCode]) {

            $arFakeOffers[$propCode]["options"][$resultItem[$propCode]["id"]] = [
                "id"       => $resultItem[$propCode]["id"],
                "value"    => $resultItem[$propCode]["value"],
                "url"      => $resultItem["url"],
                "selected" => $resultItem[$propCode]["id"] == $current[$propCode] ? "Y" : "N"
            ];
        }
    }
}


Вопрос заключается в том, что можно ли как-то сделать проверку вторым способом? Ибо параметров для проверки может быть больше, а постоянно допиливать типа "$prop3, $prop4" совсем не комильфо;

Может кто помочь нуждающемуся?
  • Вопрос задан
  • 66 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы