我有两个阵列,一个是OS,比如Ubuntu和Windows,另一个是系统模板,比如Ubuntu 5.3 blah blah和Windows XP SP2等等,我需要从系统模板阵列中提取操作系统,但它并不总是在一开始,有时是在中间或结尾。那么我怎么能循环遍历一个数组并检查它是否在另一个数组中,如果是这样,请告诉我操作系统是什么。
实施例
操作系统列表
$os = array("Ubuntu", "Debian", "Gentoo", "Windows", "Fedora", "CentOS", "CloudLinux", "Slackware");
系统模板列表的小部分(这将在数组中)
Ubuntu 8.04 x64 LAMP Installation
Ubuntu 8.04 x64 MySQL Installation
Ubuntu 8.04 x64 PHP Installation
x64 Installation Gentoo
Basic Installation Ubuntu 8.03
哪会给我带来
Ubuntu
Ubuntu
Ubuntu
Gentoo
Ubuntu
由于
答案 0 :(得分:0)
调用您的第一个数组(可能包含os名称的任意字符串)$foo
和搜索字词$os
,然后$result
将是与$foo
对应的数组来自$os
的姓名:
$result = array();
for($i = 0; $i < length($foo); $i++){
// set the default result to be "no match"
$result[$i] = "no match";
foreach($os as $name){
if(stristr($foo[$i], $name)){
// found a match, replace default value with
// the os' name and stop looking
$result[$i] = $name;
break;
}
}
}
答案 1 :(得分:0)
从OS列表中创建一个正则表达式以匹配每个模板字符串,然后使用该正则表达式映射每个模板字符串:
function find_os($template) {
$os = array("Ubuntu", "Debian", "Gentoo", "Windows", "Fedora", "CentOS", "CloudLinux", "Slackware");
preg_match('/(' . implode('|', $os) . ')/', $template, $matches);
return $matches[1];
}
$results = array_map('find_os', $os_templates);
array_map()
将find_os()
函数应用于每个模板字符串,返回一组匹配的操作系统。