从另一个数组中的数组中搜索字符串

时间:2010-07-09 04:18:54

标签: php

我有两个阵列,一个是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

由于

2 个答案:

答案 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()函数应用于每个模板字符串,返回一组匹配的操作系统。