比较两个数组并显示第一个数组中不存在的值第二个数组值

时间:2015-10-21 09:34:03

标签: php arrays

$data1 -
Array([0] => Array([file_id_fk] => 1)
      [1] => Array([file_id_fk] => 2)
      [2] => Array([file_id_fk] => 5)
      [3] => Array([file_id_fk] => 3) 
      ........ 
      [300]=>Array([file_id_fk] => 3)

$data2 - 
Array([0] => Array
        ([file_id] => 1 
         [file_sender_type] => 1
         [file_sender_id] => 1 
         [file_subject] => test 1)
         ...... 
         [360]=>Array...

在此,我想将$data1->file_id_fk$data2->file_id进行比较,并打印$data2中不存在的$data1值。

4 个答案:

答案 0 :(得分:0)

您似乎想要使用array_diff(),但由于您需要$data2的额外值,您需要更改顺序: array_diff($data2, $data)

请阅读完整文档:http://php.net/manual/en/function.array-diff.php

答案 1 :(得分:0)

想象一下自己是PHP Parser。您希望如何看到必须解析的代码?我问自己这个问题并提出以下建议:

$valuesThatAreInTheFirstArrayButNotInTheSecond = array_diff($theFirstArray, $theSecondArray);

我无法做到更多。

作为PHP Parser,我有很好的文档。在所谓的互联网上有一个网站,它描述了我做和喜欢做的事情。您可以在PHP.net Manual

中找到有关我如何解析array_diff()的文档。

修改

因为数组中有一个数组(起始?),所以可以在数组周围使用current()函数。这将获取阵列的当前密钥。由于数组中只有一个键,因此总是会选择一个键。

这将使:

$valuesThatAreInTheFirstArrayButNotInTheSecond = array_diff(current($theFirstArray), current($theSecondArray));

显示差异可以这样做:

if (array_key_exists('file_id', $valuesThatAreInTheFirstArrayButNotInTheSecond)) {
    echo $valuesThatAreInTheFirstArrayButNotInTheSecond['file_id'];
}

答案 2 :(得分:0)

这不适用于较旧的PHP版本(我目前使用的是5.4)。

$data1ID        = array_column($data1, 'file_id_fk');
$results        = array_filter($data2, function($v) use ($data1ID){
    return !in_array($v['file_id'], $data1ID);
});

print_r($data1);
print_r($data2);
print_r($results);

这是我的输入数据和结果:

/vhost/virtual/sandbox/public/index.php:55
array(5) {
    [0] = array(1) {
        [file_id_fk] = int(1) 1
    }
    [1] = array(1) {
        [file_id_fk] = int(1) 2
    }
    [2] = array(1) {
        [file_id_fk] = int(1) 5
    }
    [3] = array(1) {
        [file_id_fk] = int(1) 3
    }
    [4] = array(1) {
        [file_id_fk] = int(1) 3
    }
}

/vhost/virtual/sandbox/public/index.php:56
array(3) {
    [0] = array(4) {
        [file_id] = int(1) 1
        [file_sender_type] = int(1) 1
        [file_sender_id] = int(1) 1
        [file_subject] = string(6) "test 1"
    }
    [1] = array(4) {
        [file_id] = int(1) 5
        [file_sender_type] = int(1) 5
        [file_sender_id] = int(1) 5
        [file_subject] = string(6) "test 5"
    }
    [2] = array(4) {
        [file_id] = int(1) 7
        [file_sender_type] = int(1) 7
        [file_sender_id] = int(1) 7
        [file_subject] = string(6) "test 7"
    }
}

/vhost/virtual/sandbox/public/index.php:57
array(1) {
    [2] = array(4) {
        [file_id] = int(1) 7
        [file_sender_type] = int(1) 7
        [file_sender_id] = int(1) 7
        [file_subject] = string(6) "test 7"
    }
}

答案 3 :(得分:0)

终于得到了回答朋友非常感谢你

foreach($ data1 as $ val)         {             $ DATA1 [] = $ VAL [' file_id_fk'];         }         for($ i = 0; $ i< = count($ data2); $ i ++)         {             如果(in_array($数据2 [$ i] ['的file_id']!,$数据1))             {                 $ data [] = $ data2 [$ i];             }         }