1. PHP / Говнокод #442

    +19

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    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, 23 Января 2009

    Комментарии (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;
      }
      ?>
      Ответить
    • Bor-ka:
      Изобретение велосипеда.

      version_compare() compares two "PHP-standardized" version number strings.

      http://ru.php.net/manual/ru/function.version-compare.php
      Ответить

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