我有一个可能很愚蠢的问题?
我有三个阵列。我希望从第一个和第三个数组中获得不同的值。我创建了以下代码,但返回的值是错误的。
function ec($str){
echo $str.'<br>';
}
$arr1 = array( array(
'letter' => 'A',
'number' => '1'
),
array(
'letter' => 'B',
'number' => '2'
),
array(
'letter' => 'C',
'number' => '3'
)
);
$arr2 = array( array(
'letter' => 'A',
'number' => '1'
),
array(
'letter' => 'B',
'number' => '2'
)
);
$arr3 = array( array(
'letter' => 'D',
'number' => '4'
),
array(
'letter' => 'E',
'number' => '5'
)
);
$mergeArr = array_merge($arr1,$arr3);
foreach ($mergeArr as $kMerge => $vMerge){
foreach ($arr2 as $val2){
if($val2['letter'] != $mergeArr[$kMerge]['letter']){
ec($mergeArr[$kMerge]['letter']);
}
}
}
此代码的结果是:
A
B
C
C
D
D
E
E
我想要的结果:
C
D
E
提前致谢。
答案 0 :(得分:2)
根据您要查找的结果,应该这样做:
$mergeArr = array_merge($arr1,$arr3);
$res = array_diff_assoc($mergeArr, $arr2);
var_dump($res);
答案 1 :(得分:1)
试试这个而不是你的foreach:
$diff = array_diff($mergeArr, $arr2);
foreach( $diff as $d_k => $d_v ) {
ec($d_v['letter']);
}
答案 2 :(得分:1)
如果我理解你正在尝试做什么,这个功能应该做的工作:
function find_unique_entries () {
$found = $repeated = array();
$args = func_get_args();
$key = array_shift($args);
foreach ($args as $arg) {
if (!is_array($arg)) return FALSE; // all arguments muct be arrays
foreach ($arg as $inner) {
if (!isset($inner[$key])) continue;
if (!in_array($inner[$key], $found)) {
$found[] = $inner[$key];
} else {
$repeated[] = $inner[$key];
}
}
}
return array_diff($found, $repeated);
}
将您正在搜索的键传递给第一个参数,然后在后续参数中传递任意数量的数组。返回结果数组或出错时返回FALSE。
所以你的使用线是:
$result = find_unique_entries('letter', $arr1, $arr2, $arr3);