0

我们有一个数组,例如:

$my_array = array('Software Engineering', 'Civil Engineering', 'Hardware Engineering', 'BL AH Engineering');

现在我有一个“$q”变量,我想在数组的值之间进行搜索,删除不包含 $q 的键,这是我的代码:

foreach($my_array as $key => &$value){
    if (stripos(($value), $q) === false){
        unset($my_array[$key]);
    }
}

现在如果我们设置 $q = 'eer':

var_dump($my_array);
array
  0 => string 'Software Engineering' (length=20)
  1 => string 'Civil Engineering' (length=17)
  2 => string 'Hardware Engineering' (length=20)
  3 => &string 'BL AH Engineering' (length=17)

如您所见,没有任何内容被删除,因为所有 $values 在 'Engineering' 中都有 'eer' 没关系,但现在我设置$q = 'eer civil'了,现在:

var_dump($my_array);
array
  empty

所有的项目都被删除了,但实际上“土木工程”包含“eer”和“土木”,所以它不应该被删除,我怎么能做到这一点?我可能会用'空间'爆炸 $q 但它不起作用。

提前致谢

4

5 回答 5

2

不确定这是否是正确的答案,但今天我找到了一个类,它允许您使用通配符在数组中进行搜索。

来源:http ://www.phpclasses.org/package/7696-PHP-Search-for-patterns-in-arrays-using-wildcards.html

例子:

“5. 从数组键和值中搜索数组,其中包含单词“one”,它可以是键或值中的任何位置”

$result = $array_search -> array_like($array, '%one%', 'both', false );
于 2012-11-05T09:09:13.920 回答
2

使用explode应该工作:

更新

使用preg_splitandtrim去掉多个/前导/尾随分隔符。

$array = array('Software Engineering', 'Civil Engineering', 'Hardware Engineering', 'BL AH Engineering');
$query = ' eer   civil ';
$query = preg_split('/\s+/', trim($query));
foreach ($array as $key => $value) {
    foreach ($query as $q) {
        if (stripos($value, $q) === false) {
            unset($array[$key]);
            break;
        }
    }
}
var_dump($array);

http://codepad.org/r3jJX1aP

于 2012-11-05T09:04:50.297 回答
1

explode应该解决你的问题

<?php 

$my_array = array('Software Engineering', 'Civil Engineering', 'Hardware Engineering', 'BL AH Engineering');

$str = "eer Software";
$str = explode(' ', $str);

foreach ($my_array as $key => $result) {
    foreach($str as $q){
        if (stripos(($result), $q) === false){
            unset($my_array[$key]);
        }
    }
}

var_dump($my_array);
?>
于 2012-11-05T09:13:35.063 回答
0

如果要检查多个值,请将它们传递到一个数组中,这样$q将是一个字符串数组,而不是一个字符串,如下所示:

$q = array('eer'); // USE THIS FOR ONE parameter
//$q = array('Civil,'eer'); //USE THIS for several
foreach($my_array as $key => &$value){
    foreach($q as $qval) {
       if (stripos(($value), $qval) === false){
           unset($my_array[$key]);
       }
    }
}
于 2012-11-05T09:05:24.490 回答
-1

试试 array_search() 函数: http ://php.net/manual/en/function.array-search.php

是在数组中搜索的更好方法。

于 2012-11-05T08:59:21.173 回答