PHP-比较数组键和值

PHP-比较数组键和值,php,array-merge,Php,Array Merge,我正在尝试一个简单的数组场景,部分是为了练习数组。 下面的代码只是将用户名和密码变量组合与合并数组进行比较 它是有效的,但我认为它可以大大改进 <?php $username = 'demo@demo.com'; $password = '123456'; $allowed_creds1 = array('demo@demo.com'=>'123456'); $allowed_creds2 = array('john@smith.com'=>'654321')

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

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

<?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变量。

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

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

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

if (!empty($mergedArrays[$username]) && $mergedArrays[$username] === $password) {
    return true;
}
请注意,这使得用户名区分大小写(许多用户可能不希望这样)。请注意严格的比较(
==
)。以这种方式比较字符串时,您需要避免数值转换,这可能会导致错误的结果。例如:

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

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

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

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