-1

我有一个像

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

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

4

4 回答 4

3

您可以使用array_filter()过滤数组:

$output = array_filter($yourArray, function($v) { 
  return stristr($v, 'fu'); 
});

会输出:

array
  4622 => string 'Function Areas' (length=14)
于 2013-07-19T11:32:38.367 回答
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');
于 2013-07-19T11:47:51.093 回答
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); } }

于 2013-07-20T09:30:05.640 回答
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

请注意,代码未经测试,因此它可能包含语法错误,但原则应该有效

于 2013-07-19T11:39:53.567 回答