PHP找到两个多维数组的第一个区别

时间:2018-03-28 07:35:20

标签: php arrays multidimensional-array

我有2个PHP阵列,想要比较元素。 示例:

$Array_A[0]["field"]=10; $Array_B[0]["field"]=10;
$Array_A[1]["field"]=20; $Array_B[1]["field"]=30;
$Array_A[2]["field"]=30; $Array_B[2]["field"]=40;
$Array_A[3]["field"]=40;

Array_Difference() should return 20

$Array_A[0]["field"]=10; $Array_B[0]["field"]=10;
$Array_A[1]["field"]=20; $Array_B[1]["field"]=20;
$Array_A[2]["field"]=30; $Array_B[2]["field"]=40;
$Array_A[3]["field"]=40;

Array_Difference() should return 30

对于有超过1个差异的情况,我会循环找到并返回第一个找到的差异的函数。

执行此任务的“最佳实践”是什么?

5 个答案:

答案 0 :(得分:1)

简单地说,您使用array_udiff来创建自定义差异函数。

这将使您能够访问多维元素。

library(dplyr)

d = data.frame(A=c(1,1),B=c(0,20),C=c(0,10))

 d$B<-if_else(d$B>0,"TRUE","FALSE")
 d$C<-if_else(d$C>0,"TRUE","FALSE")


  A     B     C
1 1 FALSE FALSE
2 1  TRUE  TRUE

答案 1 :(得分:1)

你应该使用array_diff()和array_column。

array_diff(array_column($Array_A, 'field'), array_column($Array_B, 'field'))

array_diff - 返回两个数组之间的差异

array_column - 从多维数组中返回一列

如果您只想获得一个结果,那么您可以使用array_shift(),它将从数组的开头获取第一个元素

f.e

$diff = array_diff(array_column($Array_A, 'field'), array_column($Array_B, 'field'));
$firstDifference = array_shift($diff);

答案 2 :(得分:0)

你应该看看:array_diff

  

示例#1 array_diff()示例

$array1 = array("a" => "green", "red", "blue", "red"); 
$array2 = array("b" => "green", "yellow", "red"); 
$result = array_diff($array1, $array2);

print_r($result); ?> Multiple occurrences in $array1 are all treated
the same way. This will output :

Array (
     [1] => blue 
)

答案 3 :(得分:0)

$Array_A[0]["field"]=10; $Array_B[0]["field"]=10;
$Array_A[1]["field"]=20; $Array_B[1]["field"]=30;
$Array_A[2]["field"]=30; $Array_B[2]["field"]=40;
$Array_A[3]["field"]=40;

$result=your_array_diff($Array_A,$Array_B);
print_r($result);

function your_array_diff($arraya, $arrayb) {

    foreach ($arraya as $keya => $valuea) {
        if (in_array($valuea, $arrayb)) {
            unset($arraya[$keya]);
        }
    }
    return $arraya;
}

输出: Array ( [1] => Array ( [field] => 20 ) )

参考:https://stackoverflow.com/a/35071068/2520628

答案 4 :(得分:0)

与先前的答案一样,array_diff ()会在其参数的第二个数组中找到缺失值。但是,我想在你的情况下,位置(键)也很重要。在这种情况下,你可以使用一个简单的循环。

foreach ($array1 as $key => $value)
    if (array_key_exists ($key, $array2)
        if ($array1[$key]['field'] != $array2[$key]['field']){
           //do something
           break;
        }