PHP使用str_replace将数字更改为字符串而不混淆

PHP使用str_replace将数字更改为字符串而不混淆,php,arrays,string,str-replace,Php,Arrays,String,Str Replace,我正在把数字改成字符串。就像这样: 1=>A 2=>B 3=>C 4=>D 5=>E 6=>F 7=>G 8=>H 9=>I 10=>J 11=>K 12=>L 我将此函数设置为替换: function name($string) { $find=array("1","2","3","4","5","6","7","8","9","10","11","12"); $replace=array("A", "B

我正在把数字改成字符串。就像这样:

1=>A
2=>B
3=>C
4=>D
5=>E
6=>F
7=>G
8=>H
9=>I
10=>J
11=>K
12=>L
我将此函数设置为替换:

function name($string) {
    $find=array("1","2","3","4","5","6","7","8","9","10","11","12");
    $replace=array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L");
    $string=str_replace($find,$replace,$string);  
    return $string;
}
但如果我用这个:名字12;它不返回L它返回AB

实际上这是有道理的。把每封信都寄回去。如何在此函数中返回L?我该怎么办?提前感谢。

问题是str_replace只是按照您在中指定的顺序替换它们

替换订单已收到

因为str_replace从左到右替换,所以执行此操作时可能会替换以前插入的值 多次替换。另请参见本文档中的示例

如果你改用它,它将首先替换它们

$string=strtr($string, array_combine($find, $replace));

创建一个简单的映射:

$mapping = [
    '1' => 'A',
    '2' => 'B',
    '12' => 'L',
];
if (!array_key_exists($string, $mapping)) {
    throw new Exception('invalid input provided');
}
return $mapping[$string];

您确实有一个PHP函数来实现您想要实现的功能-

如果我不理解您的问题,请尝试使用range而不是long key=>value数组。我认为对于您目前的需求,stru_repalce不是一个好的选择,简单的范围将发挥神奇的作用:

<?php
  function name($num){
    $array = range('A','Z');
    $array = array_filter(array_merge(array(0), $array));
    return $array[$num];
  }

 echo name(12);
演示:

str\u replace with array replace提供了数组项中任何匹配项的字符串。因此,请使用如下图所示的数组搜索

$result = $replace[array_search($string, $find)]; 
所以你的代码改成了

function name($string) {
    $find = array("1","2","3","4","5","6","7","8","9","10","11","12");
    $replace = array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L");  
    return $replace[array_search($string, $find)]; 
}

中检查结果,而不是str\u replace use

请注意,只要$string实际包含范围为1.的数字,则此选项将保留该单词。。二十六

但是,如果出于某种原因,您想坚持stru_replace方法,则解决方案是使用前导空格和后接空格或您选择的字符填充数字…,方法如下:

function name($string) {
    $string = " " . $string . " ";
    $find=array(" 1 "," 2 "," 3 "," 4 "," 5 "," 6 "," 7 "," 8 "," 9 "," 10 "," 11 "," 12 ");
    $replace=array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L");
    $string=str_replace($find,$replace,$string);  
    return $string;
}

尝试反转数组:数组'12','11','10'。。。和数组'L','K'。为什么要使用str_replace来满足这种需求?简单的量程或chr函数是一个很好的方法,这很好。我从来没有想过。谢谢@MagnusErikssonLetters只是一个例子。它们大多是“不要”的段落tangryme@AliÖzen wooops..那么请在你的问题上提一下:谢谢,我知道。但在我的情况下,字母可以是文字。@AliÖzen但你在问题中从来没有说过。是的,很抱歉。我错了,先生。
function name($string) {
    $find = array("1","2","3","4","5","6","7","8","9","10","11","12");
    $replace = array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L");  
    return $replace[array_search($string, $find)]; 
}
function name($string) {
    return chr( $string + 64 );
}
function name($string) {
    $string = " " . $string . " ";
    $find=array(" 1 "," 2 "," 3 "," 4 "," 5 "," 6 "," 7 "," 8 "," 9 "," 10 "," 11 "," 12 ");
    $replace=array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L");
    $string=str_replace($find,$replace,$string);  
    return $string;
}