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」と「civil」の両方が含まれているため、削除しないでください。どうすればこれを機能させることができますか?$ qを「スペース」で分解する可能性がありますが、機能していません。

前もって感謝します

4

5 に答える 5

2

Using explode should work:

Update

Use preg_split and trim to get rid of multiple/leading/trailing delimiters.

$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 に答える
2

Not sure if it is the right answer, but today I found a class which allows you to search in arrays with wildcards.

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

Example:

"5. search array from array keys and values with a word "one" which can be anywhere in a keys or values"

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

explode should solve your problem

<?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

If you want to check for multiple values, pass them in an array, so $q will be an array of strings, instead of just one string, like so:

$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 に答える