迭代通过数组更改数组中与from / to associated数组匹配的所有值

时间:2013-08-12 17:38:00

标签: php arrays performance

我有一个操作系统列表。如果有人输入类似“Ubuntu”的内容,我想将其改为“Linux Ubuntu”。我有各种其他类似的修正,我想知道是否有一种有效的方法来通过阵列进行所有这些修正?

我在考虑使用带有名称和密钥对的关联数组;关键是“从”字段,名称是“到”。有没有更好的方法来更有效地做到这一点?

示例数组:

$os = array('Ubuntu', 'VMWare', 'CentOS', 'Linux Ubuntu');

上述值只是某些数据的一个示例。但基本上其中一些是正确的,有些则不然,而且需要纠正。

2 个答案:

答案 0 :(得分:0)

如何使用array preg_grep ( string $pattern , array $input [, int $flags = 0 ] ) [1]使用某种更少或更复杂的正则表达式?您可能需要简单的更正数组(如Linux Ubuntu)。

编辑: 晶体间隙的代码示例:

$regex = '/^[a-Z ]*' . $user_input . '[a-Z ]*$/';
$correct_values = {"Linux Ubuntu", "Linux Debian", "Windows XP", ...}; //const
$corrected_value = preg_grep($regex, $correct_values); 

[1] http://php.net/manual/en/function.preg-grep.php

答案 1 :(得分:0)

我通过数组检查来匹配键和名称对来解决了我的问题。我遇到的唯一问题是转换后的字符串中的点已经消失并被替换为空格。

$commonCorrections = array("Ubuntu" => "Linux Ubuntu", "Ubuntu-12.04" => "Linux Ubuntu-12.04", "Ubuntu-10.10" => "Linux Ubuntu-10.10");

for($i = 0;$i < count($groups);$i++){
    foreach($commonCorrections as $key=>$correction){
        if(strtolower($key) == trim(strtolower($groups[$i]))){
            $groups[$i] = $correction;
        }
    }
}