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
$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];
}
}