Здравствуйте!
Пытаюсь сделать некий фильтр или переключатель товаров прям на странице товаров.
Что мы имеем:
$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" совсем не комильфо;
Может кто помочь нуждающемуся?