Php 比较两个多维数组,然后仅创建唯一的

Php 比较两个多维数组,然后仅创建唯一的,php,arrays,multidimensional-array,unique,Php,Arrays,Multidimensional Array,Unique,我已经试了好几个小时了 我有两个多维数组 $newData ( [0] => Array( [id] => 1 [name] => John [sex] => male ) [1] => Array( [id] => 2 [name] => Kenny [sex] => male ) [2] => A

我已经试了好几个小时了

我有两个多维数组

    $newData (
    [0] => Array(
        [id] => 1
        [name] => John
        [sex] => male
    )
    [1] => Array(
        [id] => 2
        [name] => Kenny
        [sex] => male
    )
    [2] => Array(
        [id] => 3
        [name] => Sarah
        [sex] => female
    )
    [3] => Array(
        [id] => 4
        [name] => George
        [sex] => male
    )
)

$oldData (
    [0] => Array(
        [id] => 3
        [name] => Sarah
        [sex] => female
    )
    [1] => Array(
        [id] => 4
        [name] => George
        [sex] => male
    )
    [2] => Array(
        [id] => 5
        [name] => Peter
        [sex] => male
    )
    [3] => Array(
        [id] => 6
        [name] => Lexi
        [sex] => female
    )
)
我需要比较$newData和$oldData,只获取第一个公共数组之前的新数据

我的$newData将是:

$newData (
[0] => Array(
    [id] => 1
    [name] => John
    [sex] => male
)
[1] => Array(
    [id] => 2
    [name] => Kenny
    [sex] => male
)
)

我尝试了从array_unique(如果比较ID键)到array_unique的所有方法,但没有任何方法可以正常工作

我需要先合并它们吗?地图?呸,我不知道,我太迷路了


任何帮助都会很棒

我只会做一个嵌套的foreach循环。我不知道您使用的是哪种编程语言,但假设它是PHP($):

$tmpArray=array();
foreach($newData作为$data1){
$duplicate=false;
foreach($oldData作为$data2){
如果($data1['id']===$data2['id']&&$data1['name']==$data2['name']&&$data1['sex']===$data2['sex']),则$duplicate=true;
}
如果($duplicate==false)$tmpArray[]=$data1;
}

然后在
$tmpArray
变量中有所需的数组。当然,您可以将
$newData=$tmpArray之后。

只需在
$newData
上迭代,直到从
$oldData
中找到第一个元素

$cmp = $oldData[0];
$data = array();
foreach ($newData as $el) {
    if ($el['id'] === $cmp['id']
      && $el['name'] === $cmp['name']
      && $el['sex'] === $cmp['sex'])
        break;
    $data[] = $el;
}

您的新数据将存储在
$data

中,使用它怎么样?通过修改答案

如果存在重复项,则取消设置动态键

public function removeDuplicate($oldData, $newData, $key)
{
    $tmpArray = array();
    foreach ($newData as $data1) {
        $duplicate = false;
        foreach ($oldData as $data2k => $data2v) {
            if ($data1[$key] === $data2v[$key]) {
                unset($newData[$data2k]);
                $duplicate = true;
            }
        }
        if ($duplicate === true) {
            $tmpArray[] = $data1;
        } else {
            $tmpArray[] = $data1;
        }
    }
    return $tmpArray;
}
然后你只要打个电话

removeDuplicate($oldData, $newData, 'name');//or whatever you want

通过复制您的代码,然后将密钥名称更改为我当前拥有的名称,当我打印\r$tmparray时,它将返回一个空数组。显然,您键入了错误的内容。如果我在这里尝试这段代码,我会得到你想要的数组…我可能会,但我只是重新构建了代码,这样我更容易阅读。不管怎样,它是有效的,而你刚刚救了我,使我免于拔出所有的头发。我想得太多了。