2016-06-29 46 views
0

我想在像SQL查詢這樣的數組中搜索,我不知道該怎麼做。 這裏是我的數組:PHP groupBy array search

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

當我搜索%an%應該返回此:

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

,當我搜索%or%應該返回此:

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

我的意思是搜索中這兩個鍵和陣列的價值

+0

參見:http://stackoverflow.com/q/1503579/3933332或看'preg_grep()' – Rizier123

回答

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_filterARRAY_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 
) 
+0

這是很好的,因爲你仍然可以在搜索中包含字符代表的東西對預浸... – FirstOne

+0

@FirstOne如果我想在這兩個鍵和值來搜索 – amiroperator

+0

@amiroperator,OK,你能添加適當的聯想輸入數組預期的產出會更清楚?它應該嚴格匹配關鍵和價值,還是可以與其中一個匹配? – RomanPerekhrest

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) 
+0

什麼重點也搜索? – amiroperator

+0

請注意,如果您需要搜索其他內容,例如'an /',這將不起作用。 – FirstOne

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 
    } 
}