2011-04-09 167 views
0

我有一個這樣的數組。通過php數組搜索

$array = Array(
     [0] => Array 
      (
       [name] => Eve Greenhaw 
       [id] => 456564765 
      ) 

     [1] => Array 
      (
       [name] => Tyrone Hallberg 
       [id] => 5467652534 
      ) 

     [2] => Array 
      (
       [name] => Julio Torbert 
       [id] => 254564564 
      ) 

     [3] => Array 
      (
       [name] => John Torbert 
       [id] => 5462253455 
      ) 

     [4] => Array 
      (
       [name] => John Kimmell 
       [id] => 4525462 
      ) 

    ) 

我想搜索數組並返回名稱和ID。例如,如果用戶搜索'約翰',我希望函數返回鍵3和4.如果用戶只搜索'J',該函數應返回鍵2,3和4.

謝謝

+1

在此頁面搜索遞歸單詞。 http://php.net/manual/en/function.array-search.php – Gazler 2011-04-09 17:30:11

+0

另外,你是什麼意思的「返回鍵」 - 你想相關的數組條目返回(即:返回是一個數組包含匹配數組)還是原始數組的數字鍵?在搜索方面,它應該運行在什麼基礎上?它應該是從字符串開始的直接匹配,還是匹配包含提供的字符的元素? – 2011-04-09 17:31:45

+0

感謝您的回覆。我試圖匹配所提供的字符的元素。我試過使用array_search,但只有通過搜索全名才能工作,如果用戶只搜索名稱的一部分,它就不起作用。 – likebeats 2011-04-09 17:42:20

回答

5

一種可能性是array_filter

array_filter(陣列$輸入,回調$回調

迭代在輸入陣列中的每個值將它們傳遞給回調功能。如果回調函數返回true,則來自輸入的當前值將返回到結果數組中。數組鍵被保留。

$array每個成員本身是一個數組,所以你可以做這樣的事情(假設你正在尋找的名稱和編號):

$query = 'whatever'; 

function single_search($member) { 
    global $query; 

    $in_name = strpos($member['name'], $query); 
    $in_id = strpos($member['id'], $query); 

    return is_numeric($in_name) || is_numeric($in_id); 
} 

$filtered = array_filter($array, 'single_search'); 

$filtered數組包含所有的名稱/包含您的查詢的ID對。但是,如果您只對感興趣,則可以使用另一個功能:array_keys。它可以在$filtered返回鍵的排列,這將是所有匹配查詢等等等按鍵:

$matched_keys = array_keys($filtered); 

好運。

+0

現在我發佈了,Gazler關於使用['array_search'](http://php.net/manual/en/function.array-search.php)的評論是很性感的。 :/ – sdleihssirhc 2011-04-09 17:44:08

+0

nope。 array_filter總是更性感。 +1 – cbrandolino 2011-04-09 17:46:03

+0

感謝噸sdleihssirhc。得到它的工作:D – likebeats 2011-04-09 18:14:54

1

迭代foreach()中的$數組,並使用stripo()或preg_match()來查找匹配記錄並返回鍵。很簡單。