为什么array_search失败

时间:2012-03-18 00:15:04

标签: php

$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包含:

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

所以我希望我的$ results数组包含'bd',但它是未定义的。

3 个答案:

答案 0 :(得分:3)

array_search返回。对于username,该密钥为0,其评估结果为false。您需要检查if (array_search($k, $arr) !== false)。如果没有任何键存在,您还应该在循环之前初始化$results,否则永远不会定义$results

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

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

答案 1 :(得分:1)

deceze答案中的单线程是一个非常酷的解决方案,但一般来说,对于这种应用程序,您需要使用in_array(),而不是array_search()。想想array_search,如果你想知道在哪里找到它,in_array如果你只是想知道它在那里。

答案 2 :(得分: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);