"PHP" / Говнокод #442 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
// то что было

/************************************
return TRUE if version1 >= version2
version1 = "XX.XX.XX"
version2 = "XX.XX.XX"
************************************/
function CheckVersion($version1, $version2)
{
	$arr1 = explode(".",$version1);
	$arr2 = explode(".",$version2);
	if (intval($arr2[0])>intval($arr1[0])) return false;
	elseif (intval($arr2[0])<intval($arr1[0])) return true;
	else
	{
		if (intval($arr2[1])>intval($arr1[1])) return false;
		elseif (intval($arr2[1])<intval($arr1[1])) return true;
		else
		{
			if (intval($arr2[2])>intval($arr1[2])) return false;
			elseif (intval($arr2[2])<intval($arr1[2])) return true;
			else return true;
		}
	}
}

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

function CheckVersion($version1, $version2)
{
	return (intval(str_replace('.','',$version1))>=intval(str_replace('.','',$version2))) ? true : false;
}

Просто шикарное решение от умов битрикса

Запостил: guest guest, (Updated )

Комментарии (6) RSS

  • Мультикасса:
    Чувааак, ты не прав =) Версии в общем случае $a.$b.$c.$d - где любое число может быть больше 10, соответственно нельзя их сравнивать их как числа, просто убирая точку.
    У них конечно тоже не оптимально, зато читабельно =)
    Ответить
  • Reaggae:
    Кстати а почему нет. Оба варианта 100% эквивалентны.
    Ответить
  • Иван:
    Reaggae
    Сравнивая версии 1.12.1 > 1.1.35 (по второму варианту 1121 < 1135 )
    1.1 > 0.15 (11 < 15)
    1.1 > 0.11.2 (11 < 112)

    По-моему, второй вариант больший говнокод
    Ответить
  • gangsta:
    лол
    <?php
    function CheckVersion($version1, $version2){
            $arr1 = explode(".",$version1);
    	$arr2 = explode(".",$version2);
            for($i=0;$i<sizeof($arr1);$i++)
                 if($arr1[$i]>$arr2[$i]) return true; else return false;
    }
    ?>
    Ответить
  • gangsta:
    сорри точнее вот так правильней
    <?php
    function CheckVersion($version1, $version2){
    $arr1 = explode(".",$version1);
    $arr2 = explode(".",$version2);
    for($i=0;$i<sizeof($arr1);$i++)
    if($arr1[$i]>$arr2[$i]) return true;
    elseif ($arr1[$i]<$arr2[$i]) return false;
    else continue;
    }
    ?>
    Ответить

Добавить комментарий

Семь раз отмерь — один отрежь, guest!

    А не использовать ли нам bbcode?


    8