通过在php中搜索关键字从数组中搜索结果

时间:2013-07-19 11:24:53

标签: php arrays

我有一个类似

的数组
Array ( 
    [4621] => Hall Enstein 
    [4622] => Function Areas 
    [4623] => Dining Areas 
    [4624] => Events 
    [4625] => Galleries 
    [4626] => Custom Pages 
    [4627] => News 
    [4629] => Promotions
);

如何使用[4622] => Function Areasf之类的搜索关键字获取fu之类的结果。我使用array_intersect()函数来满足这个要求。但在这里,我必须使用关键字"Function Areas"进行搜索,而不是ffu。使用ffu,搜索结果[4622] => Function Areas不会出现。如果有人知道,请帮助我。 谢谢

4 个答案:

答案 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); } }