2012-03-18 155 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如果你只是想知道它在那裏。