PHP groupBy数组搜索

时间:2016-06-29 19:52:27

标签: php arrays search

我想搜索像SQL查询这样的数组,我不知道该怎么做。 这是我的阵列:

$array = array(
    'app' => 'apple',
    'ban' => 'banana',
    'lem' => 'lemon',
    'ora' => 'orange',
);

当我搜索%an%时,应该返回此信息:

$array = array(
    'ban' => 'banana',
    'ora' => 'orange',
);

当我搜索%or%时,应该返回:

$array = array(
    'ora' => 'orange'
);

我的意思是搜索数组的键和值

3 个答案:

答案 0 :(得分:2)

使用array_filter函数的解决方案:

$search_word = "an";  // dynamic search word
$search_result = array_filter($array, function($v) use($search_word){
    return strpos($v, $search_word) !== false; 
});

print_r($search_result);

输出:

Array
(
    [2] => banana
    [4] => orange
)

其他方法:

从PHP 5.6开始,我们可以使用带有array_filter标志的ARRAY_FILTER_USE_BOTH按键和值过滤数组:

$array = array(
    'app' => 'apple',
    'ban' => 'banana',
    'lem' => 'lemon',
    'ora' => 'orange',
);

$search_word = "a";
$search_result = array_filter($array, function($v, $k) use($search_word){
    return strpos($v, $search_word) !== false || strpos($k, $search_word) !== false; 
}, ARRAY_FILTER_USE_BOTH);

print_r($search_result);

输出:

Array
(
    [app] => apple
    [ban] => banana
    [ora] => orange
)

答案 1 :(得分:1)

使用preg_grep功能:

$array = array(
    1 => 'apple',
    2 => 'banana',
    3 => 'lemon',
    4 => 'orange'
);
print_r(preg_grep('/an/', $array));
// outputs Array ( [2] => banana [4] => orange )

答案 2 :(得分:1)

要同时搜索键和值,我认为最简单的方法是使用foreach循环。

$term = 'an';   // define your search term

foreach ($array as $key => $value) {
    // check in both key and value using strpos
    if (strpos($key, $term) !== false || strpos($value, $term) !== false) {
        $result[$key] = $value;   // add to search result if found
    }
}