需要替换数组中的EXACT字符串

时间:2017-11-09 17:58:20

标签: php arrays replace

我之前发布了类似这样的问题,但这让我抓狂,因为我无法找到解决方案。

让我解释一下。我从这样的数组中的某个站点中删除了一些值:

$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(),但没有运气。

有什么想法吗?提前谢谢。

2 个答案:

答案 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);

如果我们想要不区分大小写,我们可能需要在循环之前将所有单词更改为大写或小写。

相关问题