PHP - 比较数组键和值

时间:2013-09-06 01:05:56

标签: php array-merge

我正在尝试一个简单的数组场景,部分用于练习数组。 下面的代码只是将usernamepassword变量组合与合并数组进行比较。

它有效,但我认为它可以大大改善。

<?php 
$username = 'demo@demo.com';    
$password = '123456';   

$allowed_creds1 = array('demo@demo.com'=>'123456');
$allowed_creds2 = array('john@smith.com'=>'654321');
$allowed_creds3 = array('jane@doe.com'=>'124578');
$mergedArrays = array_merge($allowed_creds1, $allowed_creds2, $allowed_creds3);

foreach($mergedArrays as $key => $val){
    echo "$key, $val \n";
    if($username == $key && $password == $val){ 
        die("Valid Username and Password");
    }
}
?>

理想情况下,我想验证真假回报,以便我可以做更多。 我已经考虑将foreach循环放在一个返回布尔值的自定义函数中,但在我开始复杂化之前,我觉得我应该问是否有更好的方法来验证我的php变量合并的数组。

3 个答案:

答案 0 :(得分:0)

当您知道要查找的密钥时,无需迭代数组。只需使用密钥检查值即可。

if ( $mergedArrays[$username] == $password ) {
    return TRUE;
}

答案 1 :(得分:0)

由于您使用用户名作为数组键,因此您只需检查密钥是否存在:

if (!empty($mergedArrays[$username]) && $mergedArrays[$username] === $password) {
    return true;
}

请注意,这会使用户名区分大小写(许多用户可能不会期望这样)。请注意严格比较(===)。以这种方式比较字符串时,您需要避免数字转换,这可能导致不正确的结果。例如:

echo ('0x04d' == '77'); // returns true

当然,通常您应该通过数据库中的哈希/加密来存储和检查此信息。

答案 2 :(得分:0)

检查是否有名为$username的密钥,然后检查具有此密钥的元素是否具有等于密码的有效值:

if (array_key_exists($username , $mergedArrays)) {
   if(password==$mergedArrays[$username]) return true;
}