限制str_replace在字符串中只执行一次

时间:2017-11-07 16:07:13

标签: php

假设我的ARRAY包含值:

  $marVans = Array(
        'SELECT SIZE' => '',
        "09 10 YRS" => "9-10 ANI", 
        "11 12 YRS" => "11-12 ANI", 
        "13 14 YRS" => "13-14 ANI", 
        "15 16 YRS" => "15-16 ANI",
        "08" => "XS",
        "10" => "S",
        "12" => "M",
        "14" => "L",
        "16" => "XL"
     );

当我为初始数组执行str_replace()时,我搜索这些键,如下所示,它在第一次出现时也替换了10,12,14..etc,所以它返回给我最后一个值为9-S ANI,11-M ANI

str_replace(array_keys($marVans), $marVans, $marimiIntregi);

有关如何解决此问题的任何想法?我希望它单独替换,所以这个“09 10 YRS”=> “9-10 ANI”和这个“10”=> “S”按需运作。

3 个答案:

答案 0 :(得分:0)

您应该可以转而使用strtr代替:

strtr

const UserSchema = mongoose.Schema({ name: { type: String, unique: true }, created_at: { type: Date } }); 完成的翻译不会相互冲突,而且它采用您已经使用的翻译对的确切格式。

有关示例,请参阅https://eval.in/894736

答案 1 :(得分:-1)

documentation of str_replace()解释说:

  

如果searchreplace是数组,那么str_replace()会从每个数组中获取一个值,并使用它们在subject上搜索和替换。

这意味着,在您的情况下,它首先用空字符串SELECT SIZE替换'',然后用09 10 YRS替换9-10 ANI,依此类推。

您的问题的解决方案是更改替换对的顺序,例如以后的搜索值不是先前替换的子字符串(即将最后5个条目放在第一位):

$marVans = Array(
    'SELECT SIZE' => '',
    "08" => "XS",
    "10" => "S",
    "12" => "M",
    "14" => "L",
    "16" => "XL"
    "09 10 YRS" => "9-10 ANI", 
    "11 12 YRS" => "11-12 ANI", 
    "13 14 YRS" => "13-14 ANI", 
    "15 16 YRS" => "15-16 ANI",
);

答案 2 :(得分:-2)

可以使用preg_replace:

完成
function str_replace_first($from, $to, $subject)
{
    $from = '/'.preg_quote($from, '/').'/';
    return preg_replace($from, $to, $subject, 1);
 }
str_replace_first('abc', '123', 'abcdef abcdef abcdef'); 
// outputs '123def abcdef abcdef'