Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 比较两个数组并列出常用项_Php_Arrays - Fatal编程技术网

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']]);
});

你看过数组过滤器或数组映射函数吗?这里有这些东西