PHP在两个多维数组中找到相同的值,并将它们映射到单独的数组中

PHP在两个多维数组中找到相同的值,并将它们映射到单独的数组中,php,multidimensional-array,Php,Multidimensional Array,我有两个多维数组: Array ( [1] => Array ( [id] => 1 [email] => aaa@mail.com some irrelevant pairs ) [2] => Array ( [id] => 2 [email] => bbb@mail.com some irrelevant pairs ) [3] => Array

我有两个多维数组:

Array (
[1] => Array
    (   
    [id] => 1 
    [email] => aaa@mail.com

    some irrelevant pairs
    )

[2] => Array
    (
    [id] => 2 
    [email] => bbb@mail.com

    some irrelevant pairs
    )

[3] => Array
    (
    [id] => 3 
    [email] => ccc@mail.com

    some irrelevant pairs
    ))

正如您看到的,它们都有相同值的键“email”。如何将ID对提取为单独数组中的键值对,作为相同电子邮件的映射?我尝试使用foreach循环和in_数组函数,但出现了一些问题。这就是我需要的:

Result(电子邮件值相同的ID对:
my_array_与_ID的_对=(“1”=>“4”,“2”=>“5”,“3”=>“6”);


请帮助,非常感谢!

您可以使用此方法并将数据存储在新阵列中

$result = [];
foreach($a1 as $a){
   foreach($b1 as $b){
      if($b[email] == $a[email])
         $result[] = [$a[id]=>$b[id]];
   }
}

您可以使用array\u column创建两个平面数组,您可以在其中使用array\u搜索。
如果array_search返回not false,则它是找到的匹配项的键

$arr1 = array_column($arr1, 'email', 'id');
$arr2 = array_column($arr2, 'email', 'id');

foreach($arr1 as $key => $val){
    $find = array_search($val, $arr2);
    if($find !==false) $result[$key] = $find;
}
var_dump($result);
输出:

array(3) {
  ["1 "]=>
  string(2) "4 "
  ["2 "]=>
  string(2) "5 "
  ["3 "]=>
  string(2) "6 "
}

性能优化,基于@Andreas答案:

$map1 = array_column($arr1, 'id', 'email');
$map2 = array_column($arr2, 'id', 'email');

$result = [];

foreach ($map1 as $email => $id)
{
    if (isset($map2[$email]))
    {
        $result[$id] = $map2[$email];
    }
}
  • 已删除
    $arr1
    $arr2
    覆盖
  • 添加了
    $result
    声明

id在数组中是唯一的吗?@Andreas是的,所有id都是唯一的。这很有用,但输出会导致单独的数组,而不是单个数组。无论如何,谢谢!非常感谢,这正是我需要的!!非常感谢!此输出:$result[1]=>0、[2]=>1、[3]=>2,但是根据你的答案,用户1597430给出了输出的答案:$result[1]=>4,[2]=>5,[3]=>6;@MirjanaKatalina不,没有!看看上面的链接。
$map1 = array_column($arr1, 'id', 'email');
$map2 = array_column($arr2, 'id', 'email');

$result = [];

foreach ($map1 as $email => $id)
{
    if (isset($map2[$email]))
    {
        $result[$id] = $map2[$email];
    }
}