Перейти к содержанию

Рекомендуемые сообщения

Доброе утро!

 

Помогите, пожалуйста, составить условия на php

 

Есть три переменные(А,В, С), нужно составить условия:

 

1. Если существуют переменные В и С, и В > C, то вывести В, иначе вывести С

2. Если существует переменная В или С, то вывести ту, которая существует

3. Иначе: вывести А

 

Пробую написать на php эти все условия - получается как то много всего

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
<?php
$a;
$b;
$c;

if (isset($b, $c) && $b > $c) {
	echo $b;
} elseif (isset($b, $c) && $b < $c) {
	echo $c;
} elseif (isset($b)) {
	echo $b;
} elseif (isset($c)) {
	echo $c;
} else {
	echo $a;
}
?>

Иногда лучше много написать чем абракадабру в 1 строку

  • +1 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Подпишусь на головоломку, что бы не потерять тему:).

 

ИМХО, на вскидку: На самом деле условия не зависимые, поэтому тупо проверяешь отдельными несвязанными ифами и всё.

Изменено пользователем florapraktik

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

<?php if (isset($b) && isset($c)) { ?>
        <?php if ($b > $c) { ?>
            <?php echo $b; ?>
            <?php } else { ?>
            <?php echo $c; ?>
        <?php } ?>
<?php } elseif (isset($b) { ?>
<?php echo $b; ?>
<?php } elseif (isset($c) { ?>
<?php echo $c; ?>
<?php } else { ?>
<?php echo $a; ?>
<?php } ?>

 

не работает

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
if (B || C) {
   if (B = true && B > C) {
	 echo 'B';
   } else {
     echo 'C';
   }
} else {
	echo 'А';
}

Вроде так
PS но через проверку на существование переменной isset, как написали выше - будет правильней

  • +1 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
3 минуты назад, Prorab337 сказал:

<?php
$a;
$b;
$c;

if (isset($b, $c) && $b > $c) {
	echo $b;
} elseif (isset($b, $c) && $b < $c) {
	echo $c;
} elseif (isset($b)) {
	echo $b;
} elseif (isset($c)) {
	echo $c;
} else {
	echo $a;
}
?>

Иногда лучше много написать чем абракадабру в 1 строку

Аминь

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Только что, Prorab337 сказал:

<?php
$a;
$b;
$c;

if (isset($b, $c) && $b > $c) {
	echo $b;
} elseif (isset($b, $c) && $b < $c) {
	echo $c;
} elseif (isset($b)) {
	echo $b;
} elseif (isset($c)) {
	echo $c;
} else {
	echo $a;
}
?>

Иногда лучше много написать чем абракадабру в 1 строку

 

Спасибо, огромное!

 

Не ожидал, что так быстро поможете, класс!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

$a заведомо true?

 

И пока не разошлись:

почему isset, а не !empty ?

В чём разница и нюансы применения?

Изменено пользователем florapraktik

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

isset проверяет есть ли переменная и не является ли она null, но например 0 - будет определять как true

empty проверяет если переменная и не является ли она пустой, так же она не выдает предупреждение если переменной нет, тот же 0 будет определять как false (пустоту)

 

ахах) смешной пример нашел в сети, круче и не придумать))
Ты хочешь купить пиво
isset - определяет есть ли у тебя карман

empty - определяет есть ли у тебя карман и наличка чтобы купить это пиво

  • +1 2

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
12 минут назад, Einshtein сказал:

isset проверяет есть ли переменная и не является ли она null, но например 0 - будет определять как true

empty проверяет если переменная и не является ли она пустой, так же она не выдает предупреждение если переменной нет, тот же 0 будет определять как false (пустоту), если 0 не является строкой

 

Спасибо.

 

Хорошо, правильно-ли я понял, что:

в данном случае применили isset что бы обрабатывать 0 как true?

Какова логика выбора? Это ведь не вопрос личных предпочтений, есть реальные веские причины для выбора?

 

И ещё:

$var = false;
if (isset($var)) {}

Чем закончится?

Изменено пользователем florapraktik

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
5 минут назад, florapraktik сказал:

Спасибо.

 

Хорошо, правильно-ли я понял, что:

в данном случае применили isset что бы обрабатывать 0 как true?

Какова логика выбора? Это ведь не вопрос личных предпочтений, есть реальные веские причины для выбора?

все верно, 0 как true 
Логика выбора проста - если мы знаем что переменная может быть 0 - то используем isset, если 0 не может быть - используем epmty
Хотя я на правах говнокодера использую isset и уже внутри условия указываю что делать с 0, если нужно

  • +1 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Только что, florapraktik сказал:

$a заведомо true?

 

И пока не разошлись:

почему isset, а не !empty ?

В чём разница и нюансы применения?

 

у меня - да, $a - заведомо существует.

это цена у меня.

сделал костыль - автогенерацию бонусных баллов (1% от цены, скидки или акции)

 

$a - цена товара (указана для всех товаров, но на всякий случай её тоже проверил на существование)

$b - цена в скидках

$c - цена в акциях

 

Далее, жууууткий костыль (работает при редактировании карточки товара)(для разных групп покупателей всё одинаковое, иначе надо править):

 

в /admin/view/template/catalog/product_form.tpl  вместо <td class="text-right"><input type="text" name="product_reward[<?php echo $customer_group['customer_group_id']; ?>][points]" value="......

 

указал:

 

<td class="text-right"><input type="text" name="product_reward[<?php echo $customer_group['customer_group_id']; ?>][points]" value="<?php
$d = 0;
if (isset($price)) {
$a = $price/100;
} 
if (isset($product_discount['price'])) {
$b = ($product_discount['price'])/100;
}
if (isset($product_special['price'])) {
$c = ($product_special['price'])/100;
}
if (isset($b, $c) && $b > $c) {
	echo $b;
} elseif (isset($b, $c) && $b < $c) {
	echo $c;
} elseif (isset($b)) {
	echo $b;
} elseif (isset($c)) {
	echo $c;
} elseif (isset($a)) {
	echo $a;
} else {
    echo $d;
}
?>" class="form-control" /></td>

 

Аналогично сделал цену на товар в бонусных баллах.

 

п.с. делаю для себя, костыли люблю.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ээээ... объясните, пожалуйста.

 

что вернёт $product_special['price'], если акций не было? NULL ?

А если акции были, но закончились?

Потому что isset($product_special['price']) вернёт true, если $product_special['price'] === false;

 

Изменено пользователем florapraktik

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
8 минут назад, florapraktik сказал:

Ээээ... объясните, пожалуйста.

 

что вернёт $product_special['price'], если акций не было? NULL ?

А если акции были, но закончились?

Потому что isset($product_special['price']) вернёт true, если $product_special['price'] === false;

 

 

1. Не существует

Notice: Undefined variable: product_special

2. На счёт этого не думал. Нужно + ещё условие на $product_special['date_end']

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
17 минут назад, ArtemPitov сказал:

if ( (float) $product_special['price'] )

 

гм, не понял куда это.

 

Вместо if (isset....?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а потом от таких модулей все логи засраны notices

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
3 hours ago, Gann said:

 

Спасибо, огромное!

 

Не ожидал, что так быстро поможете, класс!

 

 

Ахаха, не слушай их,

вот правильный, короткий и понятный код:

echo isset($b)?(isset($c)?max($b,$c):$b):(isset($c)?$c:$a);

А то понакатали тебе длиннющей колбасы непонятной!

 

 

 

 

Изменено пользователем LetMeCode
  • +1 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
30 минут назад, Gann сказал:

 

гм, не понял куда это.

 

Вместо if (isset....?

Это туда, что $product_special['price'] строка.

Прежде, чем сравнивать надо преобразовать в число.

И $product_discount['price'] тоже.

Ну и, да можно if($var) проверять на наличие

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
45 минут назад, LetMeCode сказал:

 

 

Ахаха, не слушай их,

вот правильный, короткий и понятный код:


echo isset($b)?(isset($c)?max($b,$c):$b):(isset($c)?$c:$a);

А то понакатали тебе длиннющей колбасы непонятной!

 

 

 

 

Слово понятный у вас лишнее) особенно когда придётся добавить какое-то условие

  • +1 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
3 часа назад, nikifalex сказал:

а потом от таких модулей все логи засраны notices

 

м-де.... уже и модули

 

если проверять на существование - notices ведь не будет?

Перекрутил всяко - чисто по ошибкам. 

 

какбе я это все сделал,чтобы упростить себе работу по заполнению. 

в планах - купить готовый модуль. у @AWARO такой вроде есть. но пока - зачем он мне?! пока костыль сгодится. Упростить и проверить - пойдут ли бонусы в ход

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
3 часа назад, LetMeCode сказал:

 

 

Ахаха, не слушай их,

вот правильный, короткий и понятный код:


echo isset($b)?(isset($c)?max($b,$c):$b):(isset($c)?$c:$a);

А то понакатали тебе длиннющей колбасы непонятной!

 

В принципе, понятно, да. Но, спасибо! 

 

Как вы "это" делаете? Т.е. в каком "редакторе" пишите?

 

2 часа назад, Prorab337 сказал:

Слово понятный у вас лишнее) особенно когда придётся добавить какое-то условие

Верно подмечено

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
4 часа назад, florapraktik сказал:

Это туда, что $product_special['price'] строка.

Прежде, чем сравнивать надо преобразовать в число.

И $product_discount['price'] тоже.

 

В общем:

$product_special['price'] и $product_discount['price'] - одно и тоже. Число, или число с плавающей точкой - не важно. "Формат" - одинаковый получается.

 

Вот и получается - что и преобразовывать не нужно. Работает, во всяком случае (т.е. сравнивается и работает как надо) :lol:

 

п.с. я в итоге ещё немного условия подкрутил - чтобы цена в бонусных баллах складывалась из максимальной цены, а начисление баллов за покупку - из минимальной.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
1 час назад, Gann сказал:

 

в планах - купить готовый модуль... но пока костыль сгодится.

Если модуль закублен, то костыль, пожалуй, даже лучше.

Даже если 

if($string1 > $string2) {echo $string1;}

И всё равно, лучше костыль.:D

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Только что, florapraktik сказал:

Если модуль закублен, то костыль, пожалуй, даже лучше.

Даже если 


if($string1 > $string2) {echo $string1;}

И всё равно, лучше костыль.:D

 

открываю БД, таблица  oc_product_discount, смотрим price видим decimal (15,4)


далее, БД открыта, таблица oc_product_special - всё аналогично.

 

Для примера, DECIMAL(10,3) сохраняет ЧИСЛА точно в следующем формате: ppppppp.sss

 

Неловко вышло.

 

п.с. явно не строки сравниваем - про строку - образно, но не понятно, как оказалось. Поправил.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.