PHP - Сравнение ключей и значений массива

Я пытаюсь простой сценарий массива, частично для практики с массивами. Код ниже просто сравнивает username а также password Переменная combo для объединенных массивов.

Это работает, но я думаю, что это может быть значительно улучшено.

<?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 ответа

Решение

Нет необходимости перебирать массив, когда вы знаете ключ, который ищете. Просто проверьте значение с помощью ключа.

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

Проверьте, есть ли ключ под названием ваш $username и затем проверьте, имеет ли элемент с этим ключом правильное значение, равное паролю:

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

Поскольку вы используете имя пользователя в качестве ключа массива, вы можете просто проверить наличие ключа:

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

Обратите внимание, что это делает имя пользователя чувствительным к регистру (многие пользователи могут этого не ожидать). Обратите внимание на строгое сравнение (===). При сравнении строк таким способом вам нужно избегать преобразования чисел, которое может привести к неверным результатам. Например:

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

Конечно, обычно вы должны хранить и проверять эту информацию с помощью хэшей / шифрования в базе данных.

Другие вопросы по тегам