我有个也许很愚蠢的问题?
我有三个数组。我想从第一个和第三个数组中获得不同的值。我创建了以下代码,但返回的值是错误的。
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提前谢谢。
发布于 2012-01-20 22:31:17
根据您正在查找的结果,应该可以这样做:
$mergeArr = array_merge($arr1,$arr3);
$res = array_diff_assoc($mergeArr, $arr2);
var_dump($res);请参阅snippet on codepad。
发布于 2012-01-20 22:37:31
试试这个而不是你的foreach:
$diff = array_diff($mergeArr, $arr2);
foreach( $diff as $d_k => $d_v ) {
ec($d_v['letter']);
}发布于 2012-01-20 22:38:34
如果我理解正确的话,这个函数应该可以完成以下工作:
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);See it working
https://stackoverflow.com/questions/8942793
复制相似问题