Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Условия на php (???)


Gann

Recommended Posts

Доброе утро!

 

Помогите, пожалуйста, составить условия на 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']

Надіслати
Поділитися на інших сайтах

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

 

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

 

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

 

 

Надіслати
Поділитися на інших сайтах

2 минуты назад, Gann сказал:

 

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


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

 

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

 

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

 

 

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

вардамп $product_special['price'] показывает стринг.

"за время пути собака могла подрасти"

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.