我有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个差异的情况,我会循环找到并返回第一个找到的差异的函数。
执行此任务的“最佳实践”是什么?
答案 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 ) )
答案 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;
}