[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: неравенство...
MatrixGod
всем привет!

есть 5 переменных. надо выполнить иф только если все они разные. например:
if($a != $b != $c != $d != $e)

но условие такого вида работать не хочет. как правильно написать условие?

всем спасибо!



Спустя 14 минут, 38 секунд (11.11.2010 - 20:51) Nikitian написал(а):

$arr=array();
$arr[$a]=1;
$arr[$b]=1;
$arr[$c]=1;
$arr[$d]=1;
$arr[$e]=1;
if(sizeof($arr)==5){


}


Спустя 2 минуты, 38 секунд (11.11.2010 - 20:54) sergeiss написал(а):
Сравнить каждое с каждым... И лучше сделать это в цикле. Не так уж и много получается сравнений :)
Цикл лучше для того, что можно будет легко сделать функцию сравнения для неизвестного заранее количества переменных. Надо только будет все их загнать в массив. И на выходе получить одну логическую переменную.

А можно и попроще ;)
1. Загоняем все величины в массив.
2. Подсчитываем, сколько раз встречаются дубликаты - array_count_values
3. Используем array_flip, для "разворачивания" ключей и величин...
...и смотрим, сколько осталось величин в массиве. Если одна - то все исходные уникальные.

$arr=array( $a, $b, $c, $d, $e); // любое количество
if( count( array_flip( array_count_values( $arr) ) ) == 1 ) // все уникальные
{ ... }
else // есть неуникальные
{ ... }


...и только не спрашивай, как это работает... Подумай сам :)

PS. Никитиан опередил :) Но мой вариант, хотя по сути и такой же, но - красивее ;) А самое главное - не зависит от количества исходных величин.

Спустя 2 часа, 9 минут, 54 секунды (11.11.2010 - 23:04) Joker написал(а):
$a = 1;
$b = 1;
$c = 1;
$d = 1;
$e = 1;

var_dump(($a == $b) == (($c == $d) == $e)); // true


$a = 2;
$b = 1;
$c = 1;
$d = 1;
$e = 1;

var_dump(($a == $b) == (($c == $d) == $e)); // false

$a = 1;
$b = 1;
$c = 1;
$d = 1;
$e = 1;

var_dump(($a == $b) == (($c == $d) == $e)); // true


$a = 5;
$b = 5;
$c = 5;
$d = 5;
$e = 5;

var_dump(($a == $b) == (($c == $d) == $e)); // true

Спустя 33 минуты, 17 секунд (11.11.2010 - 23:37) sergeiss написал(а):
Joker - а где универсальная хрень для произвольного количества переменных??? wink.gif

Спустя 56 минут, 42 секунды (12.11.2010 - 00:34) SlavaFr написал(а):

function has_equals(){
return func_num_args()!=count(array_count_values(func_get_args()));
}


if(!has_equals(2,7,9)){
echo "net odinakovyh";
}else{
echo "odinakovye";
}

Спустя 15 минут, 59 секунд (12.11.2010 - 00:50) Sanchopansa написал(а):
а как на счет такой проверки на уникальность и неповторность :)
function not_equals (&$arr)
{
$start_count = count($arr);
$result = array_unique($arr);
return ($start_count === count($result))?true:false;
}

$a = array(1,2,3,4,15);
if (not_equals($a))
{
echo "Данные уникальны";
} else {
echo "Данные не уникальны";
}

Спустя 14 минут, 15 секунд (12.11.2010 - 01:04) SlavaFr написал(а):
Цитата (Sanchopansa @ 11.11.2010 - 21:50)
return ($start_count === count($result))?true:false;

так достаточно
return ($start_count === count($result));


а в общем мы все вместе изнасиловали array функции в личных целях, только по тому, что это только в пхп будет быстрере работать чем обычные циклы.

Спустя 16 минут, 17 секунд (12.11.2010 - 01:20) Sanchopansa написал(а):
SlavaFr
спасибо упустил этот момент sad.gif в знаки рабочий день дается smile.gif

Спустя 5 часов, 52 минуты, 25 секунд (12.11.2010 - 07:13) twin написал(а):
Sanchopansa
Цитата
а как на счет такой проверки на уникальность и неповторность :)

Как то сложно все...
 echo (count(array_unique(array($a,$b,$c,$d))) == 1) ? 'Данные уникальны' : 'Данные не уникальны';


Для числовых можно так извратиться:
 echo  (min($a,$b,$c,$d) != max($a,$b,$c,$d)) ? 'разные' : 'одинаковые';

Спустя 1 час, 23 минуты, 10 секунд (12.11.2010 - 08:36) kirik написал(а):
Наверное самые странные варианты:
$a = 1;
$b = 1;
$c = 1;
$d = 1;
$e = 1;

// вариант нумбер один
if($a.','.$b.','.$c.','.$d.','.$e === $b.','.$a.','.$d.','.$e.','.$c) {
echo 'Одинаковые';
} else {
echo 'Разные';
}

// и еще один
$str = str_replace($a, '', $a.$b.$c.$d.$e, $cnt);
if(empty($str) && $cnt == 5) {
echo 'Одинаковые';
} else {
echo 'Разные';
}

:)

UPD
еще вариант, с массивом:
$arr = array($a,$b,$c,$d,$e);

$count = array_count_values($arr);
if(next($count) === false) {
echo 'Одинаковые';
} else {
echo 'Разные';
}

Спустя 6 часов, 48 секунд (12.11.2010 - 14:37) inpost написал(а):
if(($a!=$b) && ($a !=$c) && ($a !=$d) && ($a !=$e) && ($b != $c) && ($b != $d) && ($b != $e) &&($c!=$d) && ($c !=$e) && ($d != $e))
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.