Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 根据第二个从数组中删除数据_Php_Arrays - Fatal编程技术网

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

Php 根据第二个从数组中删除数据,php,arrays,Php,Arrays,我有一个数组,包含名称、电子邮件和ID 第二个数组包含相同的参数,但数据不同 我想删除第一个数组中的所有单元格,第二个数组中不存在电子邮件。 比如说- 第一个阵列: array (size=4) 0 => array (size=3) 'name' => string 'Shlomi green' (length=25) 'email' => string 'shlomig$mail.co.il' (length=25) 'co

我有一个数组,包含名称、电子邮件和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将保留在第一个数组中

请参见下文,在线评论应对此进行充分解释

// 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。换句话说:当字符串表示形式相同时

如果值为字符串,则可以使用用户数组_intersect


然而,如果您的值与不同的字符串表示相关,尽管您希望其中一些被认为是相等的,但您应该看看。由于这个方法,可以使用自定义比较函数作为回调函数

最好使用第二个数组本身。您的预期结果是什么?您尝试过什么吗?我可以使用array_intersect吗?@Roi是的,但请注意值比较,请参阅我的更新答案。@Roi如果您阅读并查看下面的注释,您可能会得到更多帮助question@RioRizier123是对的,您应该特别注意注释“最好使用第二个数组本身”。我假设第一个数组在子数组中会有其他条目,这就是为什么您不使用第二个数组的原因,但如果您谈论的是使用array\u interest,则不可能是这样。你需要进一步阐述你的问题。