$example = array('An example','Another example','Last example');
如何在上面的数组中对单词“Last”进行松散搜索?
echo array_search('Last example',$example);
如果指针与值中的所有内容完全匹配,上面的代码只会回显值的键,这是我不想要的。我想要这样的东西:
echo array_search('Last',$example);
如果该值包含单词“Last”,我希望该值的键能够回显。
要查找符合您的搜索条件的值,您可以使用
array_filter
函数:
$example = array('An example','Another example','Last example');
$searchword = 'last';
$matches = array_filter($example, function($var) use ($searchword) { return preg_match("/\b$searchword\b/i", $var); });
现在
$matches
数组将仅包含原始数组中包含单词 last(不区分大小写)的元素。
如果需要查找符合条件的值的键,则需要循环遍历数组:
$example = array('An example','Another example','One Example','Last example');
$searchword = 'last';
$matches = array();
foreach($example as $k=>$v) {
if(preg_match("/\b$searchword\b/i", $v)) {
$matches[$k] = $v;
}
}
现在数组
$matches
包含原始数组中的键值对,其中值包含(不区分大小写)单词 last。
function customSearch($keyword, $arrayToSearch){
foreach($arrayToSearch as $key => $arrayItem){
if( stristr( $arrayItem, $keyword ) ){
return $key;
}
}
}
$input= array('An example','Another example','Last example');
$needle = 'Last';
$ret = array_keys(array_filter($input, function($var) use ($needle){
return strpos($var, $needle) !== false;
}));
这将为您提供所有值包含针的键。
它找到第一个匹配的元素的键:
echo key(preg_grep('/\b$searchword\b/i', $example));
如果您需要所有键,请使用 foreach:
foreach (preg_grep('/\b$searchword\b/i', $example) as $key => $value) {
echo $key;
}
Aleks G给出的答案不够准确。
$example = array('An example','Another example','One Example','Last example');
$searchword = 'last';
$matches = array();
foreach($example as $k=>$v) {
if(preg_match("/\b$searchword\b/i", $v)) {
$matches[$k] = $v;
}
}
线路
if(preg_match("/\b$searchword\b/i", $v)) {
应该被这些取代
$match_result = preg_match("/\b$searchword\b/i", $v);
if( $match_result!== false && $match_result === 1 ) {
或更简单地说
if( preg_match("/\b$searchword\b/i", $v) === 1 ) {
同意http://php.net/manual/en/function.preg-match.php
如果模式匹配给定主题,则 preg_match() 返回 1;如果不匹配,则返回 0;如果发生错误,则返回 FALSE。
function substr_in_array($needle, array $haystack)
{
foreach($haystack as $value)
{
if(strpos($value, $needle) !== FALSE) return TRUE;
}
return FALSE;
}
$arr = array("YD-100 BLACK", "YD-100 GREEN", "YD-100 RED", "YJ-100 BLACK");
//split model number from color
$model = explode(" ",$arr[0])
//find all values that match the model number
$match_values = array_filter($arr, function($val,$key) use (&$model) { return stristr($val, $model[0]);}, ARRAY_FILTER_USE_BOTH);
//returns
//[0] => YD-100 BLACK
//[1] => YD-100 GREEN
//[2] => YD-100 RED
这只适用于 PHP 5.6.0 及以上版本。