[Jante] Skrevet 27. februar 2003 Del Skrevet 27. februar 2003 Er det noen som har peiling på hvordan man skal få til dette i php? Forslag mottas med takk. Lenke til kommentar
magikern Skrevet 28. februar 2003 Del Skrevet 28. februar 2003 http://magikern.sytes.net/code/php/misc/roman.phps Fant det på nettet et sted for ganske lenge siden, men har ikke fått det til å fungere, tror ikke egentlig det er så veldig store feilen har bare ikke sett noe særlig igjennom. demo(ser riktignok bare en feilmelding siden det ikke er helt riktig, skal se om jeg kanskje finner ut av det en dag): http://magikern.sytes.net/code/php/misc/roman.php Lenke til kommentar
christt Skrevet 28. februar 2003 Del Skrevet 28. februar 2003 Grunnen til at du får feil er fordi han har implementert en funksjon som han kaller array_search() denne finnes i PHP: http://www.php.net/manual/en/function.array-search.php Man kan ikke kalle en funksjon det samme som en som allerede fins. Derfor error: "Can't redeclare function...." Løsningen blir derfor å kalle funksjonen array_search() noe annet eks: my_array_search(). Lenke til kommentar
magikern Skrevet 28. februar 2003 Del Skrevet 28. februar 2003 da har jeg fixet det og scriptet kan nå prøves på addressen over, foreløpig har jeg bare fått dec2roman delen til å fungeren feilfritt, roman2dec fungerer den og men det kommer en feilmelding som jeg ikke vet helt hvordan jeg skal få bort, Parse error: parse error, unexpected ';' in /var/www/html/code/php/misc/roman.php(125) : eval()'d code on line 1 da jeg fjernet ";" kom det bare en feilmelding om linja under Parse error: parse error, unexpected T_RETURN in /var/www/html/code/php/misc/roman.php on line 126 og da virker ingenting. Lenke til kommentar
christt Skrevet 1. mars 2003 Del Skrevet 1. mars 2003 <?PHP echo'<form method="POST" action="';($_SERVER["PHP_SELF"]); echo'"> <input type="text" name="number"> <input type="submit" value="dec2roman"> </form>'; echo'<form method="POST" action="';($_SERVER["PHP_SELF"]); echo'"> <input type="text" name="linje"> <input type="submit" value="roman2dec"> </form>'; function dec2roman ($number) { # Making input compatible with script. $number = floor($number); if($number < 0) { $linje = "-"; $number = abs($number); } # Defining arrays $romanNumbers = array(1000, 500, 100, 50, 10, 5, 1); $romanLettersToNumbers = array("M" => 1000, "D" => 500, "C" => 100, "L" => 50, "X" => 10, "V" => 5, "I" => 1); $romanLetters = array_keys($romanLettersToNumbers); # Looping through and adding letters. while ($number) { for($pos = 0; $pos <= 6; $pos++) { # Dividing the remaining number with one of the roman numbers. $dividend = $number / $romanNumbers[$pos]; # If that division is >= 1, round down, and add that number of letters to the string. if($dividend >= 1) { $linje .= str_repeat($romanLetters[$pos], floor($dividend)); # Reduce the number to reflect what is left to make roman of. $number -= floor($dividend) * $romanNumbers[$pos]; } } } # If I find 4 instances of the same letter, this should be done in a different way. # Then, subtract instead of adding (smaller number in front of larger). $numberOfChanges = 1; while($numberOfChanges) { $numberOfChanges = 0; for($start = 0; $start < strlen($linje); $start++) { $chunk = substr($linje, $start, 1); if($chunk == $oldChunk && $chunk != "M") { $appearance++; } else { $oldChunk = $chunk; $appearance = 1; } # Was there found 4 instances. if($appearance == 4) { $firstLetter = substr($linje, $start - 4, 1); $letter = $chunk; $sum = $firstNumber + $letterNumber * 4; $pos = array_search($letter, $romanLetters); # Are the four digits to be calculated together with the one before? (Example yes: VIIII = IX Example no: MIIII = MIV # This is found by checking if the digit before the first of the four instances is the one which is before the digits in the order # of the roman number. I.e. MDCLXVI. if($romanLetters[$pos - 1] == $firstLetter) { $oldString = $firstLetter . str_repeat($letter, 4); $newString = $letter . $romanLetters[$pos - 2]; } else { $oldString = str_repeat($letter, 4); $newString = $letter . $romanLetters[$pos - 1]; } $numberOfChanges++; $linje = str_replace($oldString, $newString, $linje); } } } return $linje; } function roman2dec ($linje) { # Fixing variable so it follows my convention $linje = strtoupper($linje); # Removing all not-roman letters $linje = ereg_replace("[^IVXLCDM]", "", $linje); # 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; } # Implementation of the array_search function. Works only with numerical arrays. function my_array_search($searchString, $array) { foreach ($array as $content) { if($content == $searchString) { return $pos; } $pos++; } } echo dec2roman($_REQUEST['number']); echo roman2dec($_REQUEST['linje']); ?> Lenke til kommentar
magikern Skrevet 2. mars 2003 Del Skrevet 2. mars 2003 takk christt da funka det... Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå