0

我有一个操作系统列表。如果有人输入“Ubuntu”之类的内容,我想将其更正为“Linux Ubuntu”。我还有其他各种这样的更正,我想知道是否有一种有效的方法可以通过数组进行所有这些更正?

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

样本数组:

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

以上数值只是部分数据的示例。但本质上,其中一些是正确的,有些则不是,它们需要被纠正。

4

2 回答 2

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

于 2013-08-12T17:44:51.637 回答
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;
        }
    }
}
于 2013-08-13T14:22:54.903 回答