PHP多维数组:检查键是否存在及获取对应密码
PHP多维数组的键检查与值获取问题
问题背景
我有一个存储用户数据的多维数组,结构如下:
$users = array( "bill@microsoft.com" => array( "Name" => "Bill Gates", "Password" => "12345", ), "jim@apple.com" => array( "Name" => "Jim Franklyn", "Password" => "98765" ), );
我需要实现以下操作:
- a) 检查
$_POST['email']是否作为键存在于该数组中; - b) 获取对应键下的密码。
我知道in_array不适用于多维数组,且仅需检查外层键,无需遍历子数组,请问是否只能通过foreach实现?
解决方案
完全不需要用foreach,PHP有专门针对数组键检查的函数,直接用array_key_exists()或者isset()就能搞定,效率比遍历高得多:
方法1:使用array_key_exists()
这个函数专门用来检查指定的键是否存在于数组中,不管键对应的值是不是null都能准确判断:
$email = $_POST['email'] ?? ''; // 检查键是否存在 if (array_key_exists($email, $users)) { // 获取对应密码 $password = $users[$email]['Password']; // 后续逻辑 } else { // 邮箱不存在的处理 }
方法2:使用isset()
如果你的用户数组里不会出现键对应的值为null的情况,用isset()更高效,因为它会同时检查键是否存在且对应的值不为null:
$email = $_POST['email'] ?? ''; if (isset($users[$email])) { $password = $users[$email]['Password']; // 后续逻辑 } else { // 邮箱不存在的处理 }
两者的区别
array_key_exists():只检查键是否存在,哪怕键对应的值是null也会返回trueisset():检查键存在且对应的值不为null,如果值是null会返回false
根据你的数组结构,两个方法都能用,选哪个看你后续的业务需求就行。
内容的提问来源于stack exchange,提问作者WeekendCoder
相关产品推荐
相关产品推荐

