2014-03-04 59 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