Оптимално сравнение

dakata__92

Super Moderator
Как мога най оптимално да сравня 4 променливи дали са равни на друга променлива? Не ми се иска да сравнявам всяка променлива по отделно или да изписвам дълги редове с код. Примерно нещо такова, което е грешно естествено но в името на примера:
PHP:
if(($one && $two && $three && $four) == $compare)
{
	echo 'DA';
}
else
{
	echo 'NE';
}
Все си мисля, че има доста по-оптимален начин за сравнение от колкото да сравнявам всяка по отделно:
PHP:
if($one == $compare && $two == $compare && $three == $compare && $four == $compare)
{
echo "DA";
}
else
{
echo "NE";
}
Питам защото ми предстои да правя доста на брой сравнения с доста повече от 4 променливи и принципно искам да сваля броя на редовете. Не ми пречи да го драсна по начина по който съм писал доста пъти, но не пречи да попитам за по-оптимално сравняване.
 
Можеш да си направиш функция и да й подаваш стойностите на променливите в масив + другата променлива,на която искаш да са равни и с цикъл да проверяваш за всяка.
PHP:
function check($arr = array(),$var) {
                $result = false;
		foreach($arr as $key => $val) {
			if($val == $var) $result = true;
			else $result = false;
		}
		return $result;
	}
	
	if(check(array('val1','val2','val3'),'val')) echo 'da';
	else echo 'ne';
 
Оправих се. Използвах базисно сравнеие true false и после само проверка с if($one && $two) ....

Код:
	$compare = "      ";
	$one = ($arr[$y_start][$x_start] == $compare)? true : false;
	$two = ($arr[$y_start][$x_stop] == $compare)? true : false;
	$three = ($arr[$y_stop][$x_start] == $compare)? true : false;
	$four = ($arr[$y_stop][$x_stop] == $compare)? true : false;
if($one && $two && $three && $four)
{
echo "da";
}
else
{
echo "ne";
}
 
fbian каза:
Да,но така пак изписваш всяка проверка.
Да така е, но за случая който ползвам циклична проверка изобщо не е наложителна и приложима спрямо различните сравнения които ще правя. Идеята с цикъла е добра но аз вече се намирам във вложени цикли и ми се въртят променливите, просто във функцията исках като писане да сбия кода не да добавям ненужни цикли. :) Интересувах се дали има подобен начин и в един форум намерих решението на това което търсех. :?:
 
Така изглежда по-хубаво :):)

PHP:
$a = 5;
$b = 5;
$c = 5;

$should_be = 5;

$values = array($a, $b, $c);

if(!array_diff($values) && $a == $should_be) {
    echo 'equal';
}
else {
	echo 'not equal';
}

:arrow: + си спестяваш един ред, ако сложиш $values директно в аrray_diff :?: :?:
 
Така е но наистинй кода, който дадох ми спестява изключително много проверки, тъй като ми се налага да сравнявам и променливите по между им а така когато са вече определени със съкратен if else само ги взимам и извършвам логическите следствия в пъти по-добре и удобно.
 
Ще си имаш главоболия при евентуална нужда от промяна на броя на операндите. По-добре използвай масив.

В противен случай можеш да използваш това:

PHP:
$a = 1; $b = 2; $c = 3; $d = -4;

$o = -4;

switch($o) {
	case $a:
	case $b:
	case $c:
	case $d:
		echo 'Da!';
		break;
	default:
		echo 'Ne!';
		break;
}
 

Горе