我有一个类似
的数组Array (
[4621] => Hall Enstein
[4622] => Function Areas
[4623] => Dining Areas
[4624] => Events
[4625] => Galleries
[4626] => Custom Pages
[4627] => News
[4629] => Promotions
);
如何使用[4622] => Function Areas
或f
之类的搜索关键字获取fu
之类的结果。我使用array_intersect()
函数来满足这个要求。但在这里,我必须使用关键字"Function Areas"
进行搜索,而不是f
或fu
。使用f
或fu
,搜索结果[4622] => Function Areas
不会出现。如果有人知道,请帮助我。
谢谢
答案 0 :(得分:3)
您可以使用array_filter()
过滤数组:
$output = array_filter($yourArray, function($v) {
return stristr($v, 'fu');
});
输出:
array
4622 => string 'Function Areas' (length=14)
答案 1 :(得分:1)
没有标准函数来搜索数组值中的部分匹配。你需要使用@billyonecan提到的array_filter函数来定义一个方便的函数:
function array_match_string($haystack, $needle){
return array_filter($haystack, function($value) use ($needle){
return stripos($value, $needle) !== false;
});
}
您可以简单地使用数组和字符串调用函数来搜索:
$result_array = array_match_string($array, 'fu');
PHP解决方案< 5.3 (我们需要一个全局辅助变量在回调中可见):
function array_match_string_pre_php_53($haystack, $needle){
global $_array_match_string_needle;
$_array_match_string_needle = $needle;
return array_filter($haystack, 'array_match_string_callback');
}
function array_match_string_callback($value){
global $_array_match_string_needle;
return strpos($value, $_array_match_string_needle) !== false;
}
$result_array = array_match_string_pre_php_53($array, 'Fu');
答案 2 :(得分:0)
您可以尝试使用strpos返回找到找到的给定关键字的位置,如果字符串不包含关键字
,则尝试使用-1$fruits = array('apple', 'banana', 'orange');
$found = array(); // every that matches keyword
$keyword = "e"; //searching for letter e
foreach($array as $fruit)
{
if(stripos($fruit, $keyword) !== -1)
{
array_push($found, $fruit);
}
}
// fruits should now contain apple and orange
请注意,代码未经过测试,因此可能包含语法错误,但原则应该有效
答案 3 :(得分:0)
此要求的另一种方法是必须在数组处于循环中的循环中移动此数组
$keyword = strtolower(trim($needle));
foreach($array as $key=>$arrayvalue)
{
$isExists = @preg_match("/$keyword/", $arrayvalue);
if($isExists)
{ $com = sprintf('%s [nid: %d]', ucwords($arrayvalue), $key);
$spresults[$com] = ucwords($arrayvalue);
}
}