根据第二个数据从数组中删除数据

时间:2015-04-01 10:40:33

标签: php arrays

我的数组包含 - 姓名,电子邮件和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”将留在我的第一个阵列

2 个答案:

答案 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。由于这种方法,可以使用自定义比较函数作为回调。