比较两个数组并列出常见条目 [英] Compare two arrays and list common entries
问题描述
我有以下两个数组:
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
)
我想编写一个片段,显示一个与user Array中Username字段匹配的所有userStatus条目的数组
I want to write a snippet that brings up an array of all userStatus entries that match on Username field in the users Array.
我可以通过运行循环并比较b的double来实现这一点其他数组,但是有没有使用PHP内置数组函数或其他任何方式执行此操作的快速方法呢?
I can achieve this through a double for loop running and comparing both arrays, but is there a fast way to do this using PHP inbuilt array functions or any other way?
推荐答案
重新使用PHP> = 5.3,则可以使用带有匿名回调函数的array_filter ...效率不高,但很简单。
If you're using PHP >= 5.3 then you could use array_filter with an anonymous callback function... Not particularly efficient, but simple.
$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);
如果您想更快一点,那么可以将用户数组转换为地图,通过将值更改为键,然后检查回调中是否设置了键。
If you're after something a little quicker, then convert the user array into a "map", by changing the values to keys, then check if a key is set in the callback.
$userlookup = array_flip($users);
$filtered = array_filter($userStatus, function ($var) {
global $userlookup;
return isset($userlookup[$var['Username']]);
});
这篇关于比较两个数组并列出常见条目的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!