From: "Ford, Mike" on


> -----Original Message-----
> From: Andre Polykanine [mailto:andre(a)oire.org]
> Sent: 27 May 2010 09:14
> To: Adam Richardson
> Cc: php-general(a)lists.php.net
> Subject: Re[2]: [PHP] One more time about regexes
>
> Hello Adam,
>
> You did understand me exactly and perfectly).
> Ordering arrays is a good idea but I don't know how to do that
> exactly.
> For instance, there's a cypher called Polybius square. You write in
> the alphabet in a grid like this:
> 1 a b c d e
> 2 f g h i j
> 3 k l m n o
> 4 p q r s t
> 5 u v w x y
> 6 z
>
> There is a way where i/j are equal to make a 5 by 5 square but for
> me
> it's equal since I'm working with a 33-letter Russian alphabet, so
> no
> way to make it a perfect square.
> Anyway, a letter has two coordinates and is represented by a two-
> digit
> number. For example, E is 15, K is 21, Z is 61 and so on.
> So we have a word, say, PHP. It will look like this: 412341.

Well, as you're wanting to replace pairs of digits, I'd search for exactly that -- but I think I'd use the e flag to employ a programmed replacement, thus:

$str = "4123415 - 2444 452315 12154445!";
$replaced = preg_replace("{(\d\d)}e", "polybius_decode('\\1')", $str);

echo $replaced;

function polybius_decode($pair) {

static $polybius = array(
'11'=>'a', 'b', 'c', 'd', 'e',
'21'=>'f', 'g', 'h', 'i', 'j',
'31'=>'k', 'l', 'm', 'n', 'o',
'41'=>'p', 'q', 'r', 's', 't',
'51'=>'u', 'v', 'w', 'x', 'y',
'61'=>'z'
);

return isset($polybius[$pair]) ? $polybius[$pair] : $pair;
}

Seems to work: "php5 - is the best!". :)

Cheers!

Mike
--
Mike Ford,
Electronic Information Developer, Libraries and Learning Innovation,
Leeds Metropolitan University, C507, Civic Quarter Campus,
Woodhouse Lane, LEEDS,  LS1 3HE,  United Kingdom
Email: m.ford(a)leedsmet.ac.uk
Tel: +44 113 812 4730





To view the terms under which this email is distributed, please go to http://disclaimer.leedsmet.ac.uk/email.htm