2014-03-04 84 views
-1

我有一個用戶數組,我想最終得到一個數組,其中用戶名或全名包含某個字符($char)。我的陣列看起來像這樣:字符串上的數組篩選器

Array 
(
    [0] => Array 
     (
      [User] => Array 
       (
        [id] => 36 
        [username] => JohnS 
        [fullname] => John Smith 
       ) 

     ) 

    [1] => Array 
     (
      [User] => Array 
       (
        [id] => 137 
        [username] => Tim 
        [fullname] => Tim Wilson 
       ) 

     ) 

) 

然而,當我運行這個濾鏡陣列 - 我結束了一個空$結果陣列無論什麼價值$ char是 -

$result = array_filter($users, 'matches'); 

function matches($var){ 
    return stripos($var["User"]["username"].$var["User"]["fullname"], $char) !== false; 
} 

任何想法?!

感謝

+0

你能'var_export'你的陣列,而不是'print_r'? –

+1

你必須使''char'全局或使用閉包'use'構造作爲'array_filter'回調 – hindmost

+0

array(0 => array('User'=> array('id'=>'36',' '''>''''''''''''''''','''''''''''''''')' ,'fullname'=>'Tim Wilson'),),) – Tim

回答

1

$charmatches功能是不確定的。 (如果它是一個全局變量,那麼你就必須添加global $char;第一。)

或做象下面這樣:

$result = array_filter($users, function ($var) use ($char) { 
    return stripos($var["User"]["username"].$var["User"]["fullname"], $char) !== false; 
}); 
+0

謝謝,我以前沒有遇到過這個。即使在同一個文件中直接在這個函數之前設置$ q,或者在函數變量中包含$ q,這也不起作用,所以這個'use'函數很好。 – Tim

+0

@Tim'use'不是一個函數,它是一種語言結構 – hindmost