Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Сортировка римских цифр
 
 автор: gOFREe   (01.08.2015 в 17:42)   письмо автору
 
 

Как отсортировать римские цифры, подайте идею пожалуйста.

  Ответить  
 
 автор: Саня   (02.08.2015 в 22:35)   письмо автору
 
   для: gOFREe   (01.08.2015 в 17:42)
 

Сконвертируйте в арабские, отсортируйте, сконвертируйте обратно.

  Ответить  
 
 автор: gOFREe   (03.08.2015 в 11:16)   письмо автору
 
   для: Саня   (02.08.2015 в 22:35)
 

Такая функция сойдет?


<?
function number_to_roman($value)
{
  if($value<0) return "";
  if(!$value) return "0";
  $thousands=(int)($value/1000);
  $value-=$thousands*1000;
  $result=str_repeat("M",$thousands);
  $table=array(
    900=>"CM",500=>"D",400=>"CD",100=>"C",
    90=>"XC",50=>"L",40=>"XL",10=>"X",
    9=>"IX",5=>"V",4=>"IV",1=>"I");
  while($value) {
    foreach($table as $part=>$fragment) if($part<=$value) break;
    $amount=(int)($value/$part);
    $value-=$part*$amount;
    $result.=str_repeat($fragment,$amount);
  }
  return $result;
}
?>

  Ответить  
 
 автор: Саня   (03.08.2015 в 13:27)   письмо автору
 
   для: gOFREe   (03.08.2015 в 11:16)
 

Не знаю. Вы пробовали её протестировать?

  Ответить  
 
 автор: gOFREe   (03.08.2015 в 13:30)   письмо автору
 
   для: Саня   (03.08.2015 в 13:27)
 

Да, из арабских в римские переводит, а вот функция переводит из римских в арабские

<?
function roman2dec ($linje) { 
    # Fixing variable so it follows my convention 
    $linje = strtoupper($linje); 
     
    # Removing all not-roman letters 
    $linje = ereg_replace("[^IVXLCDM]", "", $linje); 

    print("\$linje    = $linje<br>"); 
     
    # Defining variables 
    $romanLettersToNumbers = array("M" => 1000, "D" => 500, "C" => 100, "L" => 50, "X" => 10, "V" => 5, "I" => 1); 

    $oldChunk = 1001; 

    # Looping through line 
    for($start = 0; $start < strlen($linje); $start++) { 
        $chunk = substr($linje, $start, 1); 
         
        $chunk = $romanLettersToNumbers[$chunk]; 
         
        if($chunk <= $oldChunk) { 
            $calculation .= " + $chunk"; 
        } else { 
            $calculation .= " + " . ($chunk - (2 * $oldChunk)); 
        } 
         
     
        $oldChunk = $chunk; 
    } 
     
    # Summing it up 
    eval("\$calculation = $calculation;"); 
    return $calculation; 

} 
?>

  Ответить