Php 比较两个数组并列出常用项
我有以下两个阵列:Php 比较两个数组并列出常用项,php,arrays,Php,Arrays,我有以下两个阵列: userStatus --------------- Array ( [0] => Array ( [Username] => cynthia@test.net [Status] => Active ) [1] => Array ( [Username] => mary@tes
userStatus
---------------
Array
(
[0] => Array
(
[Username] => cynthia@test.net
[Status] => Active
)
[1] => Array
(
[Username] => mary@test.net
[Status] => Terminated
)
[2] => Array
(
[Username] => steve@test.net
[Status] => OnVacation
)
)
users
------
Array
(
[0] => steve@test.net
[1] => mark@test.net
[2] => cynthia@test.net
)
我想编写一个代码段,它将显示一个数组,其中包含与users数组中的Username字段匹配的所有userStatus条目
我可以通过运行双for循环并比较两个数组来实现这一点,但是有没有一种使用PHP内置数组函数或任何其他方法来实现这一点的快速方法?如果您希望快速,请按如下方式设置用户数组:
$users = array(
'steve@test.net' => 1,
'mark@test.net' => 1,
'cynthia@test.net' => 1
);
然后只需检查是否设置了数组索引:
$matched = array();
foreach($userStatus as $k => $v) {
if(isset($users[$v['Username']])) {
$matched[$k] = $v;
}
}
输出:
foreach($matched as $k => $v) {
echo "$k = ".$v['Username']." is ".$v['Status']."<br>";
}
如果您使用的是PHP>=5.3,那么您可以使用带有匿名回调函数的数组过滤器。。。不是特别有效,但很简单
$userStatus=array(
array(
'Username' => 'cynthia@test.net',
'Status' => 'Active'
),
array(
'Username' => 'mary@test.net',
'Status' => 'Terminated'
),
array(
'Username' => 'steve@test.net',
'Status' => 'OnVacation'
));
$users = array(
'steve@test.net',
'mark@test.net',
'cynthia@test.net'
);
$filtered = array_filter($userStatus, function ($var) {
global $users;
return in_array($var['Username'], $users);
});
print_r($filtered);
如果您想要更快一点的东西,那么通过将值更改为键,将用户数组转换为映射,然后检查回调中是否设置了键
$userlookup = array_flip($users);
$filtered = array_filter($userStatus, function ($var) {
global $userlookup;
return isset($userlookup[$var['Username']]);
});
你看过数组过滤器或数组映射函数吗?这里有这些东西