"George Pitcher" <george.pitcher@ingenta.com> wrote in message HHEIKBOENJPJNLHFCCCCCEFOCGAA.george.pitcher@ingenta.com">news:HHEIKBOENJPJNLHFCCCCCEFOCGAA.george.pitcher@ingenta.com... > That's great, but what about the reverse: Roman to Arabic? > > George in Oxford // NOTE: the order of the table is // important! I will use greedy parsing, // so (for example) IX and IV must precede // I to parse correctly. $RomanTable = array( "M" => 1000, "CM" => 900, "D" => 500, "CD" => 400, "C" => 100, "XC" => 90, "L" => 50, "XL" => 40, "X" => 10, "IX" => 9, "V" => 5, "IV" => 4, "I" => 1 ); function MatchClause($needle, $haystack) { // These two tests are probably just paranoia, // but - hey, I'm paranoid. ;-) if (strlen($haystack) < 1) return false; if (strlen($haystack) < strlen($needle)) return false; return( strncasecmp($needle, $haystack, strlen($needle)) == 0 ); } function RemoveClause($needle, $haystack) { return( substr($haystack, strlen($needle)) ); } function RomanToInt($str) { global $RomanTable; $sum = 0; do { $done = true; foreach($RomanTable as $clause => $value) if ( MatchClause($clause, $str) ) { $sum += $value; $str = RemoveClause($clause, $str); $done = false; break; } } while ($done == false); return($sum); } NOTE! This algorithm is sufficient but not complete - it will correctly translate all legal Roman-numeral strings, but cannot detect illegal strings. -- Hugh Bothwell hugh_bothwell@hotmail.com Kingston ON Canada v3.1 GCS/E/AT d- s+: a- C+++ L++>+++$ P+ E- W+++$ N++ K? w++ M PS+ PE++ Y+ PGP+ t-- 5++ !X R+ tv b++++ DI+++ D-(++) G+ e(++) h-- r- y+ -- PHP Database Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php