我有以下两个数组:
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
)
我想编写一个片段,显示所有userStatus条目的数组,这些条目与用户数组中的用户名字段匹配。
我可以通过双循环运行和比较两个数组来实现这一点,但有一种快速的方法可以使用PHP内置数组函数或任何其他方式来实现这一点吗?
答案 0 :(得分:0)
如果你使用PHP> = 5.3那么你可以使用带有匿名回调函数的array_filter ...不是特别有效,但很简单。
$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']]);
});
答案 1 :(得分:-1)
如果您想要快速,请按以下方式设置用户数组:
$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>";
}