Php STRPO和foreach的性能问题

Php STRPO和foreach的性能问题,php,performance,foreach,strpos,Php,Performance,Foreach,Strpos,我声明了以下数组: $array = array( "Car" => array("(car;", "(is Car;", "(suv;"), "Boat" => array("(boat;", "(Boat;"), "Motorcycle" => array("(cycle;") ); 然后我在MySQL数据库中查询大约20000个结果作为字符串($string),所以我要做的是在其中一个字符串中搜索子数组值(即“(car;”)类似于这个字符串的“awe

我声明了以下数组:

$array = array(
   "Car" => array("(car;", "(is Car;", "(suv;"),
   "Boat" => array("(boat;", "(Boat;"),
   "Motorcycle" => array("(cycle;")
 );
然后我在MySQL数据库中查询大约20000个结果作为字符串(
$string
),所以我要做的是在其中一个字符串中搜索子数组值(即“(car;”)类似于这个字符串的“awesome(car;offroad;)”

为此,我尝试了以下方法:

foreach($string as $element) {
    foreach($array as $key=>type) {
            foreach($type as $search_string) {
                if(strpos($element, $search_string) !== FALSE) { //if the search term is present 
                    return $key;
                    break 2; //exit the loop as it found the right device type
                }
            } //second foreach strings to search for
        } return 'Other';
    }
问题是,如果我查询很少的结果,它就可以工作,但是对于数千行来说,它只会消耗大量内存,并且返回结果需要很长时间


如何提高代码的性能?< /P>你是否绝对需要存储查询的全部结果?也许你可以在获取查询结果的同时进行搜索,只保留你需要的行。你在中间——要么使用全文搜索,要么(是的,在MySQL中不好)。特殊的解决方案,比如Sphinx.RDBMS,不仅仅是哑数据存储,它们是为查询而设计的。将所有数据转储到内存中,然后用php查询并不是答案