Как обеденить запрос?

Статус
В этой теме нельзя размещать новые ответы.

grebovich

Гуру форума
Регистрация
19 Мар 2012
Сообщения
367
Реакции
84
Всем привет!
Уважаемые гуру, помогите обеденить запрос...
Код:
// Управляем ценами на сайте
if (price <=1000) price = price *1.50
if (price >1000 and price <=2000) price = price *1.40
if (price >2000 and price <=4000) price = price *1.30
if (price >4000 and price <=7000) price = price *1.20
if (price >7000 and price <=10000) price = price *1.10
if (price >10000) price = price *1.07

Нужно чтоб условие проверки if выполнялось только раз но с учетом всех условий в списке, то есть сделать весь этот список одной строкой...

У меня есть парсер который парсит цены, так вот вышеуказанный код должен проверять, цены входящие и если условие совпадает то увеличивать на определенный процент...

Все как бы работает, но оно добавляет несколько раз, так как каждая строка проверяет отдельно по очереди, .... а нужно чтоб проверяло только раз но с учетом всех условий
Заранее огромное спасибо.
 
Вот такой велосипед можно использовать

PHP:
<?php

var_dump(multiplyPrice(999));
var_dump(multiplyPrice(1001));
var_dump(multiplyPrice(2001));
var_dump(multiplyPrice(4001));
var_dump(multiplyPrice(7001));
var_dump(multiplyPrice(10001));
var_dump(multiplyPrice('google'));


function multiplyPrice($price)
{
    $prices = [
        '1.5' => [
            'min' => 0,
            'max' => 1000,
        ],
        '1.4' => [
            'min' => 1000,
            'max' => 2000,
        ],
        '1.3' => [
            'min' => 2000,
            'max' => 4000,
        ],
        '1.2' => [
            'min' => 4000,
            'max' => 7000,
        ],
        '1.1' => [
            'min' => 7000,
            'max' => 10000,
        ],
        '1.07' => [
            'min' => 10000,
            'max' => PHP_INT_MAX,
        ],
    ];

    $percent = array_filter($prices, function ($el) use ($price) {
        return $price > $el['min'] AND $price <= $el['max'];
    });
    $percent = (float)key($percent);
    return $percent > 0 ? $percent : 1.0;
}
 
Я пробовал такой вариант:
Код:
if (price <=1000) {
  price = price *1.50;
} else if (price >1000 and price <=2000) {
  price = price *1.40;
} else if (price >2000 and price <=4000) {
  price = price *1.30;
} else if (price >4000 and price <=7000) {
  price = price *1.20;
} else if (price >7000 and price <=10000) {
  price = price *1.10;
} else if (price >10000) {
  price = price *1.07;
} else {
  price = '0';
}

Но в таком случае читает только первое условие... Что не так?
 
Вот такой велосипед можно использовать

PHP:
<?php

var_dump(multiplyPrice(999));
var_dump(multiplyPrice(1001));
var_dump(multiplyPrice(2001));
var_dump(multiplyPrice(4001));
var_dump(multiplyPrice(7001));
var_dump(multiplyPrice(10001));
var_dump(multiplyPrice('google'));


function multiplyPrice($price)
{
    $prices = [
        '1.5' => [
            'min' => 0,
            'max' => 1000,
        ],
        '1.4' => [
            'min' => 1000,
            'max' => 2000,
        ],
        '1.3' => [
            'min' => 2000,
            'max' => 4000,
        ],
        '1.2' => [
            'min' => 4000,
            'max' => 7000,
        ],
        '1.1' => [
            'min' => 7000,
            'max' => 10000,
        ],
        '1.07' => [
            'min' => 10000,
            'max' => PHP_INT_MAX,
        ],
    ];

    $percent = array_filter($prices, function ($el) use ($price) {
        return $price > $el['min'] AND $price <= $el['max'];
    });
    $percent = (float)key($percent);
    return $percent > 0 ? $percent : 1.0;
}
Это очень много я думаю, и не хочет у меня работать....
 
Решил вопрос наконец то так:
Код:
// Добавляем наценку на товар по условию начало
$price = $price;
if ($price <=1000) {
    $price = $price *1.50;
} elseif ($price >1000 and $price <=2000) {
    $price = $price *1.40;
} elseif ($price >2000 and $price <=3000) {
    $price = $price *1.35;
} elseif ($price >3000 and $price <=5000) {
    $price = $price *1.25;
} elseif ($price >5000 and $price <=7000) {
    $price = $price *1.15;
} elseif ($price >7000 and $price <=10000) {
    $price = $price *1.10;
} elseif ($price >10000) {
    $price = $price *1.07;
} else {
    $price = 0;
}
// Конец скрипта цен...
 
Я пробовал такой вариант:
Код:
if (price <=1000) {
  price = price *1.50;
} else if (price >1000 and price <=2000) {
  price = price *1.40;
} else if (price >2000 and price <=4000) {
  price = price *1.30;
} else if (price >4000 and price <=7000) {
  price = price *1.20;
} else if (price >7000 and price <=10000) {
  price = price *1.10;
} else if (price >10000) {
  price = price *1.07;
} else {
  price = '0';
}

Но в таком случае читает только первое условие... Что не так?
Если срабатывает только первое условие, значит цена всегда меньше 1000. Может там не число, а строка например? Строка при сравнении станет нулем, а ноль меньше 1000.

else if и elseif - нет разницы

тут на js правда, но всё замечательно работает
Для просмотра ссылки Войди или Зарегистрируйся
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху