我的数组包含 - 姓名,电子邮件和ID 我有第二个数组包含相同的参数,但具有不同的数据
我想删除第一个数组中的所有单元格,其中第二个数组中不存在电子邮件。 例如 - 第一个数组:
array (size=4)
0 =>
array (size=3)
'name' => string 'Shlomi green' (length=25)
'email' => string 'shlomig$mail.co.il' (length=25)
'contactID' => string '28' (length=2)
1 =>
array (size=3)
'name' => string 'Roi Keen' (length=21)
'email' => string 'roi@mail.com' (length=16)
'contactID' => string '53' (length=2)
2 =>
array (size=3)
'name' => string 'Ronen' (length=8)
'email' => string 'ronen$mail.com' (length=23)
'contactID' => string '43' (length=2)
3 =>
array (size=3)
'name' => string 'Shlomi' (length=10)
'email' => string 'shlomi$mail.co.il' (length=17)
'contactID' => string '54' (length=2)
第二阵列:
array (size=4)
0 =>
array (size=3)
'name' => string 'Shlomi green' (length=25)
'email' => string 'shlomig$mail.co.il' (length=25)
'contactID' => string '28' (length=2)
1 =>
array (size=3)
'name' => string 'Ronen' (length=8)
'email' => string 'ronen$mail.com' (length=23)
'contactID' => string '43' (length=2)
只有“shlomig $ mail.co.il”和“ronen $ mail.com”将留在我的第一个阵列
答案 0 :(得分:0)
见下文,内嵌评论应该足够好解释。
// First populate a single dimension array with
// all of the email addresses in the second array
$keepEmails = [];
foreach($arrB as $keyB=>$valueB) {
$keepEmails[] = $valueB['email'];
}
// Then iterate through the first array
foreach ($arrA as $keyA=>$valueA) {
// If email is not in the keepEmails array, then remove
if (!in_array($valueA['email'], $keepEmails)) {
unset($arrA[$keyA]);
}
}
// Re-key the array (so the key values are sequential)
$arrA = array_values($arrA);
如果您使用array_intersect,请注意PHP文档中的注释:
注意:当且仅当(字符串)$ elem1时,两个元素被认为是相等的 ===(字符串)$ elem2。用文字表示:当字符串表示相同时。
答案 1 :(得分:0)
如果您的值为String,则可以使用array_intersect
。
但是,如果您的值与不同的字符串表示相关,虽然您希望其中一些被视为相等,但您应该查看array_uintersect
。由于这种方法,可以使用自定义比较函数作为回调。