我之前发布了类似这样的问题,但这让我抓狂,因为我无法找到解决方案。
让我解释一下。我从这样的数组中的某个站点中删除了一些值:
$Array1= Array (
"UK 1.5",
"UK 01",
"UK 02",
"UK 03",
"UK 03.5",
"UK 04",
"UK 04.5",
"UK 05",
"UK 05.5",
"UK 06",
"UK 06.5",
"10 12 YRS",
"12 13 YRS",
"13 15 YRS"
);
这个带有KEYS和VALUES的数组用于我搜索和替换的内容:
$marGeneral = 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",
'WAIST' => 'TALIE',
'YRS' => 'ANI',
"UK 1.5" => "34",
"UK 01" => "32",
"UK 02" => "33",
"UK 03" => "35",
"UK 03.5" => "36",
"UK 04" => "36.5",
"UK 04.5" => "37",
"UK 05" => "38",
"UK 05.5" => "38.5",
"UK 06" => "39",
"UK 06.5" => "40",
"UK 07" => "40.5",
"UK 07.5" => "41",
"UK 08" => "42",
"UK 08.5" => "42.5",
"06" => "XS",
"08" => "S",
"10" => "M",
"12" => "L",
"14" => "XL" );
我担心的是如何在没有冲突的情况下替换值,例如,如果刮刀返回数组值12 13 YRS
,在我的搜索中未定义为键?因为在这种情况下(IF I TRY TO REPLACE ARRAY VALUES)
它会返回值L 13 YRS
而不是12 13 YRS
,因为12
已经是另一个要转换的值,但只有当它是单独的,而不是在串。如果没有定义,除非它是唯一的数值12
,否则它不应该干扰。
我尝试使用preg_replace()
,str_replace()
,strtr()
,但没有运气。
有什么想法吗?提前谢谢。
答案 0 :(得分:0)
这是因为您可能会将$marGeneral
放入替换功能中。只要$key
是替换字符串搜索并且$value
是替换字词,您就会收到此“错误”。
试试这个:
array_walk(
$Array1,
function (&$size) use ($marGeneral) {
if (array_key_exists($size, $marGeneral)) {
$size = $marGeneral[$size];
}
}
);
我建议您在数据库中执行此操作,但确实如此。
答案 1 :(得分:0)
我们可能希望进行完全匹配而不是部分字符串替换。这是我详细的解决方案:
foreach ($Array1 as &$value) {
if (isset($marGeneral[$value])) {
$value = $marGeneral[$value];
}
}
unset($value);
如果我们想要不区分大小写,我们可能需要在循环之前将所有单词更改为大写或小写。