PHP比较两个数组并获得差异

jk9hmnmh  于 2022-12-25  发布在  PHP
关注(0)|答案(5)|浏览(168)

我有两个数组

$original = array(
array('fruit' => 'appel','color' => 'green'),
array('fruit' => 'Banana','color' => 'Yellow'),
array('fruit' => 'orange','color' => 'orange',)
);

以及

$new = array(
array('fruit' => 'appel'),
array('fruit' => 'orange')
);

现在我想比较两个数组并打印出不同的那个。在这种情况下我想保留

array('fruit' => 'Banana','color' => 'Yellow')

当我使用数组交叉键时

$original_new = array_intersect_key($new, $original);

它会删除我想保留的数组,我想我是这么做的:

$original_new = array_intersect_key($new, $original);
$original_new = array_diff($original_new, $original);

但这当然行不通。有人能帮我解决这个问题吗?

63lcw9qa

63lcw9qa1#

使用一些循环和数组. Check Online
首先从$new数组中创建仅包含列的数组,然后在$original数组上使用foreach循环,检查结果是否在$new数组中,如果不在,则将整个子数组存储在数组名$arr中。

$arr = array();
$com = array_column($new, 'fruit');
foreach($original as $value){
    if(!in_array($value['fruit'], $com)){
        $arr[] = $value;
    }
}

print_r($arr); //Array ( [0] => Array ( [fruit] => Banana [color] => Yellow ) )
xdyibdwo

xdyibdwo2#

只是为了提供一个不同的观点,
可以使用一些数组函数来获得解
你只需要得到$new数组的array_column结果和$original数组的array_column结果,得到这两个数组的array_diff,最后得到key
试试这个:

$res = $original[key(array_diff(
       array_column($original,'fruit'), array_column($new,'fruit')))];
djp7away

djp7away3#

你可以不写自己的代码:

$res = array_intersect_key($original, 
            array_diff(array_column($original, 'fruit'), 
                       array_column($new, 'fruit')));

demo

epggiuax

epggiuax4#

<?php
$a1=array("a"=>"red","b"=>"green","c"=>"2.00");
$a2=array("a"=>"red","b"=>"green","c"=>"2");
$r = array_diff_assoc($a1, $a2);

print_r($r);

你可以使用array_diff_assoc(PHP 4〉= 4.3.0,PHP 5,PHP 7,PHP 8)但是注意比较是严格的(==
上面代码的结果:

Array
(
    [c] => 2.00
)
vulvrdjw

vulvrdjw5#

(PHP 4〉= 4.0.1,PHP 5,PHP 7)array_diff -计算数组的差值
将array 1与一个或多个其他数组进行比较,并返回array 1中的值,这些值在其他任何数组中都不存在。

$a1=array("a"=>"red","b"=>"green","c"=>"blue","d"=>"yellow");
$a2=array("e"=>"red","f"=>"green","g"=>"blue");

$result=array_diff($a1,$a2);
print_r($result);

这将返回

Array ( [d] => yellow )

相关问题