@amazinginternetsites

Как правильно оформить условие?

Есть код

<?php foreach($formula as $key=>$value) { ?>
	<?php
		$data = $item;
                        if ($data['dopvopremgost'] == 2){ 
					
					$data['lr1P'] = ($data['lr1l']+$data['lr1w'])*2; //Периметр
					$data['lr1SF'] = $data['lr1l']*$data['lr1w']; //Площадь пола
					$data['lr1SWALL'] = $data['lr1P']*$data['lr1h']; // Площадь стен

			                                                    }
					
                        elseif ($data['dopvopsuvsid'] == 2 || 3 || 4 || 5){ 				
					
					
					$data['sp1P'] = ($data['sp1l']+$data['sp1w'])*2; //Периметр
					$data['sp1SF'] = $data['sp1l']*$data['sp1w']; //Площадь пола
					$data['sp1SWALL'] = $data['sp1P']*$data['sp1h']; // Площадь стен
					
                                                                                             } 
                         elseif ($data['dopvopsuvsid'] == 3 || 4 || 5){ 
					
					$data['sp2P'] = ($data['sp2l']+$data['sp2w'])*2; //Периметр
					$data['sp2SF'] = $data['sp2l']*$data['sp2w']; //Площадь пола
					$data['sp2SWALL'] = $data['sp2P']*$data['sp2h']; // Площадь стен

                                                                                             } 

					
					eval('$formula_res = '.$value.';');
					
				?>
                     <?php } ?>


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

Не могу разобраться. Помогите в контексте данного кода

Заранее спасибо
  • Вопрос задан
  • 162 просмотра
Решения вопроса 1
@n1ger
html+css
А чем у вас elseif вообще отличаются? Тем, что во втором нет 2?
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
alexey-m-ukolov
@alexey-m-ukolov Куратор тега PHP
Во-первых, если вам нужно, чтобы проверки были независимыми, сделайте их независимыми. Сейчас ваш код читается как "если 1 то, иначе если 2 то, иначе если 3 то". Иными словами, уберите из логики "иначе".

Во-вторых, это хрень полная: $data['dopvopsuvsid'] == 3 || 4 || 5. Это условие всегда будет срабатывать, потому что 4 и 5 всегда будут приводиться к true. Либо пишите полное сравнение каждый раз, либо используйте in_array.
Ответ написан
@Wol_fi
php, js, mysql, highload
Проблема в том, что почему-то срабатывает одно условие.
Например если все условия удовлетворены выполняется только первое.

Простите, а что вы ожидаете от elseif (ИНАЧЕ ЕСЛИ)?
Ознакомьтесь
php.net/manual/ru/control-structures.if.php
php.net/manual/ru/control-structures.else.php
php.net/manual/ru/control-structures.elseif.php
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы