【问题标题】:PHP str_replace not correctly replacing number to stringPHP str_replace 没有正确地将数字替换为字符串
【发布时间】:2021-11-23 08:33:27
【问题描述】:

有人可以解释一下为什么 php 函数 str_replace 不能正确地将数字替换为字符串吗?

$number      =   [1,5,10,15];
$text        =   ["one", "five", "ten", "fifteen"];

$replaced_1  =   str_replace($number, $text, 1); 
$replaced_5  =   str_replace($number, $text, 5); 
$replaced_10  =   str_replace($number, $text, 10);
$replaced_15  =   str_replace($number, $text, 15);

echo $replaced_1."<br>"; // one
echo $replaced_5."<br>"; // five
echo $replaced_10."<br>"; // one0
echo $replaced_15; // onefive

带引号的相同结果:$number = ["1","5","10","15"]

【问题讨论】:

  • 预期结果是什么?如果您期望ten 而不是one0:替换从数组中的第一个元素开始,并将1 映射到one
  • @NicoHaase 将号码 10 替换为 ten 而不是 one0
  • 问题是您正在执行替换的顺序。您的1 将首先被替换。您的数组中有三个1s。 str_replace() 不在乎 11015 的一部分。
  • 感谢您的解释
  • 先按最高排序数组,也可以使用 NumberFormatter 3v4l.org/SWqo1 获取数字的单词,这样你就不需要第二个数组了

标签: php str-replace


【解决方案1】:

Str_replace() 函数用字符串中的一些其他字符替换一些字符。

你真的需要使用 str_replace 吗?否则只需使用数组即可:

$numbers = [
    1 => "one",
    15 => "fifteen",
];

echo $numbers[15];

【讨论】:

  • 请分享更多细节。您的回答没有解释为什么替换在某些给定的情况下有效,而不是在一个特定的情况下
  • @NicoHaase 这是一个有趣的问题;-) str_replace 的上下文对我来说似乎是错误的。在 str_replace 上下文中获得 15 是正确的:$number = 15; $text = 'Fifteen'; echo str_replace($number, $text, 15);
【解决方案2】:

documentation中所写:

如果 search 或 replace 是数组,则它们的元素从头到尾处理。

这意味着:输入10 的第一个替换将1 替换为one,返回one0。第一个数组 $number 中没有其他内容可以将此结果与任何内容匹配

【讨论】:

  • RTFM经典案例:-)
【解决方案3】:

我可能会选择Maik Lowrey's 的答案,但是strtr 就是为此而生的。使用 str_replace 时,1 以及 1015 中的 1 将被替换。但是strtr:

将首先尝试最长的键。一旦一个子字符串被替换,它的新值将不再被搜索。

$replaced_1  =  strtr(1, array_combine($number, $text)); 
$replaced_5  =  strtr(5, array_combine($number, $text)); 
$replaced_10 =  strtr(10, array_combine($number, $text));
$replaced_15 =  strtr(15, array_combine($number, $text));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    • 2021-08-03
    相关资源
    最近更新 更多