0

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

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

<?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 变量到合并数组。

4

3 回答 3

0

当您知道要查找的密钥时,无需遍历数组。只需使用键检查值。

if ( $mergedArrays[$username] == $password ) {
    return TRUE;
}
于 2013-09-06T01:10:27.163 回答
0

由于您使用用户名作为数组键,您可以简单地检查键是否存在:

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

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

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

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

于 2013-09-06T01:12:19.237 回答
0

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

if (array_key_exists($username , $mergedArrays)) {
   if(password==$mergedArrays[$username]) return true;
}
于 2013-09-06T01:16:01.270 回答