【问题标题】:PHP : how to replace numbers in a string with the exact given valuePHP:如何用确切的给定值替换字符串中的数字
【发布时间】:2022-01-17 15:52:59
【问题描述】:

我有 2 个数组和一个字符串:

$attribute_ids = array(200,201);
$attribute_names = array("David","Rimma");
$string = "200 2006-2009 boy, 201 girl";
$string = str_replace($attribute_ids, $attribute_names, $string);

输出是“David David6-David9 boy, Rimma girl”

预计是“David 2006-2009 男孩,Rimma 女孩”

问题是当数组包含 200 并且字符串包含 2000 时 str_replace 替换 2000 中的字符串 200。

我试图只替换数组“$attribute_ids”中给出的完全相同的字符串。

我试过preg_replace,但没用。

【问题讨论】:

  • 将数组连接成一个密钥对,所以[200 => "David", 201 => "Rimma"] 然后通过分割空格将$string 拆分成一个数组,然后只做一个 foreach 键,键对的值,然后替换字符串,如果它与键匹配,如果匹配,则将其替换为密钥对中的值
  • 这很慢(我之前的评论)但它有效
  • 你可以在$attribute_ids中使用preg_replace()和单词分隔符正则表达式
  • 对于最后一部分,我如何从拆分字符串转换回普通字符串? @Dean Van Greunen
  • 你是如何尝试使用preg_replace()的?

标签: php preg-replace str-replace


【解决方案1】:

区分整个单词和单词的一部分听起来像是正则表达式的任务,所以这是我的看法(具体来说:为模式添加正则表达式单词边界\b):

$attribute_ids = array(200,201);
$attribute_names = array("David","Rimma");
$string = "200 2006-2009 boy, 201 girl";

echo preg_replace(
    array_map(fn($item) => "/\b$item\b/", $attribute_ids),
    $attribute_names, 
    $string
); // David 2006-2009 boy, Rimma girl

我不确定映射应该在对array_map() 的调用外部还是内部进行。就像现在一样,代码有点局限于整个单词模式。但另一方面,如果这对于手头的任务没问题或者模式数组很大,那么它可能很有用:)..

【讨论】:

  • 如果有人会遇到这个问题,那么解决问题的方法就是添加 "/\b" 。 $searched_string 。 "\b/" 到您在 preg_replace 函数中搜索的字符串。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-11
  • 2016-03-26
  • 2013-08-07
  • 2016-05-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多