假设我的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”按需运作。
答案 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()
解释说:
如果
search
和replace
是数组,那么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'