2012-03-18 146 views
0
$arr =array('username','admin'); 
foreach($_GET as $k=>$v) 
    if(array_search($k, $arr)) 
     $results[$k] = $v; 

print_r($results); // prints nothing and I get a 
//$results is undefined error 

$ _GET包含:为什么array_search失败

(
    [r] => p/p 
    [i] => 9 
    [_s] => true 
    [r] => 10 
    [p] => 1 
    [s] => username 
    [o] => asc 
    [username] => bd 
) 

所以我希望我的$结果数组包含 'BD',而是它是不确定的。

回答

2

array_search返回密钥。对于username,密钥为0,其值为false。您需要检查if (array_search($k, $arr) !== false)。在循环之前,您还应该初始化$results,以防钥匙不存在,否则$results永远不会被定义。

一个更短的方式做同样的事情将是:

$results = array_intersect_key($_GET, array_flip(array('username','admin'))); 
+0

为什么是关键0?是不是'用户名'的关键?哦,它正在寻找nvm的阵列的关键。好的,thx – user740521 2012-03-18 00:21:45

0

。在你的代码中没有的$results定义。

我想你想这是什么

$arr =array('username','admin'); 
$results = array(); 
foreach($_GET as $k=>$v){ 
    $key = array_search($k, $arr); 
    if($key) 
     $results[$k] = $v; 
} 

print_r($results); 
0

在deceze答案的一个班轮是一个很酷的解决方案,但一般这种类型的应用程序,你需要使用in_array(),不array_search()。想想array_search是否想知道在哪里找到它,in_array如果你只是想知道它在那里。