比较两个数组并列出常见条目 [英] Compare two arrays and list common entries

查看:32
本文介绍了比较两个数组并列出常见条目的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下两个数组:

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆