2

我有以下数组

static public $tabla = array(
            'A'=>2, 'B'=>2, 'C'=>2,
            'D'=>3, 'E'=>3, 'F'=>3,
            'G'=>4, 'H'=>4, 'I'=>4,
            'J'=>5, 'K'=>5, 'L'=>5,
            'M'=>6, 'N'=>6, 'O'=>6,
            'P'=>7, 'Q'=>7, 'R'=>7,
            'S'=>8, 'T'=>8, 'U'=>8,
            'V'=>9, 'W'=>9, 'X'=>9,
            'Y'=>0, 'Z'=>0
            );

以及几个由字母数字字符组成的字符串,例如:“ G20513F4561B ”。根据给定数组,用等价替换字符串中的非数字字符的最有效方法是什么?

我知道这可以使用循环轻松实现,但也许有某种正则表达式可以解决问题。

谢谢

4

2 回答 2

6

你可以很容易地做到这一点str_replace,它接受数组作为它的第一个和第二个参数:

echo str_replace(array_keys($tabla), array_values($tabla), $str);

这将创建一个包含原始数组中所有键的数组和另一个包含所有值的数组。元素按照原数组的顺序在对应的位置。当str_replace使用数组参数调用时,第一个数组的第一个元素中的字符串被第二个数组的第一个元素替换,依此类推。

于 2012-10-03T18:29:27.157 回答
2

尝试strtr()

echo strtr($str, self::$tabla);

键将替换为其对应的值。

于 2012-10-03T18:34:09.003 回答