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;
}