匹配两个数组以从第二个数组获取值

时间:2015-07-07 13:16:38

标签: php arrays

我有两个阵列。

$queue_ids$subscriber_results

$queue_ids输出:

Array ( [0] => 3 [1] => 4 [2] => 5 ) 

$subscriber_results输出:

Array ( [0] => Array ( [id] => 3 [email] => test1@test.com [subscribed] => 1436264818 ) [1] => Array ( [id] => 4 [email] => test2@test.com [subscribed] => 1436265909 ) [2] => Array ( [id] => 5 [email] => test3@test.com [subscribed] => 1436265919 ) ) 

我需要匹配这两个数组,以便从email数组中获取$queue_ids数组中这些键的$subscriber_results记录。

我尝试使用array_keys()但无法使其工作。

有人能告诉我如何做到这一点吗?

4 个答案:

答案 0 :(得分:2)

您可以使用array_column提取数组,其中id是数组索引(键),电子邮件是值。然后compare it到队列ID列表flipped,因此值是索引(键)。

$matchingEmails = array_intersect_key(array_column($subscriber_results, "email", "id"), array_flip($queue_ids));

答案 1 :(得分:1)

你可以使用in_array。尝试使用上面的代码

<?php
$matched=array();
foreach($subscriber_results as $key=>$val)
{
    if(in_array($val['id'],$queue_ids))
    {
        $matched[]=$val['email'];
    }

}
print_r($matched);
?>

答案 2 :(得分:0)

您可以将array_walkin_array一起用作

$result = array();
array_walk($subscriber_results,function($v,$k)use(&$result,$queue_ids){
    if(in_array($v['id'],$queue_ids)){
        $result[] = $v['email'];
    }
});

答案 3 :(得分:0)

首先通过$subscriber_results

$queue_ids获取array_filter()中的所有匹配记录
$matches = array_filter($subscriber_results, function($v) use ($queue_ids){
            return in_array($v['id'], $queue_ids);
        });

然后,使用email

获取名为array_column()的列
$matches = array_column($matches, 'email');

现在,$matches将包含id$queue_ids的电子邮件

<小时/> 您也可以通过

与他们联系
$matches = array_column(array_filter($subscriber_results, function($v) use ($queue_ids){
            return in_array($v['id'], $queue_ids);
        }), 'email');