2013-06-03 40 views
1

我有一個簡單的函數,如果在數組中找到一個值,應該給我一個TRUE或FALSE。in_array()似乎沒有檢查關鍵2之後

function bypass($user, $bypassUsers){ 
    $users = explode(",", $bypassUsers); 
    // trim($users); 

    if(in_array($user,$users)){ 
     return true; 
    } else { 
     return false; 
    } 
} 

雖然我一切看起來,當我在陣列中有超過2個的值,函數彷彿in_array()不從關鍵看返回FALSE [2]。

有什麼想法?

+0

,如果你給我們提供了陣列測試針對 –

+0

那'trim'呼叫既多餘和無效的上*數組*這將是有益的。 – deceze

+0

$ bypassUsers是一個字符串。 '$ bypassUsers =「admin,webmaster,name」;' 如果用戶具有用戶名「name」,則該函數返回false,如果我將名稱放在第一個位置,則函數返回true ... – Samuel

回答

3

如果你想申請修剪所有元素,而不是:

$users = explode(",", $bypassUsers); 
trim($users); 

你應該這樣做,而不是:

$users = array_map('trim', explode(',', $bypassUsers)); 

它適用於trim()的結果0。之後,你可以在一個聲明中返回結果:

return in_array($user, $users, true); 
// third argument determines whether to use == or === for comparison 
+0

謝謝你我學到了很多東西。 – Samuel

0
function bypass($user, $bypassUsers){ 
    $users = explode(",", $bypassUsers); 
    foreach($users as $key=>$usr){ 
     $users[$key] = trim($usr); 
    } 

    if(in_array(trim($user),$users)){ 
     return true; 
    } else { 
     return false; 
    } 
} 

微調的問題,因爲它的工作原理與字符串不是數組