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