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

Форум 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$start1); 
         
        
$chunk $romanLettersToNumbers[$chunk]; 
         
        if(
$chunk <= $oldChunk) { 
            
$calculation .= " + $chunk"
        } else { 
            
$calculation .= " + " . ($chunk - ($oldChunk)); 
        } 
         
     
        
$oldChunk $chunk
    } 
     
    
# Summing it up 
    
eval("\$calculation = $calculation;"); 
    return 
$calculation


?>

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования