首页 > PHP > array_diff_assoc和array_diff之间的区别

array_diff_assoc和array_diff之间的区别

2009年04月02号
查看评论 发表评论 485次浏览

相同点:array_diff_assoc和array_diff均只包含仅仅出现在$array1中的数组元素
不同点:array_diff_assoc比较的时候,会同时比较数组对应的key是否相同,而array_diff不比较key
如果要实现真正意义上的两个数组差异比较,见后边网友提供的arr_diff()函数,用递归方式实现


详细见代码说明:
<?php
$array1 = array (”a” => “green”, “b” => “brown”, “c” => “blue”, “red”,’d'=>’good’);
$array2 = array (”a” => “green”, “yellow”, “red”,’good’);
$result_assoc = array_diff_assoc($array1, $array2);

$result_diff = array_diff($array1, $array2);

echo “array1=\r\n”;
print_r($array1);
echo “\r\narray2=\r\n”;
print_r($array2);
echo “\r\n\r\n”;
print_r($result_assoc);

echo “\r\narray_diff:\r\n”;
print_r($result_diff);
?>
结果:
array1=
Array
(
[a] => green
=> brown
[c] => blue
[0] => red
[d] => good
)

array2=
Array
(
[a] => green
[0] => yellow
[1] => red
[2] => good
)
Array
(
=> brown
[c] => blue
[0] => red
[d] => good
)

array_diff:
Array
(
=> brown
[c] => blue
)

附ottodenn at gmail dot com写的函数:

<?php
function arr_diff($a1,$a2){
$ar = array();
foreach ($a2 as $k => $v) {
if (!is_array($v)) {
if ($v !== $a1[$k])
$ar[$k] = $v;
}else{
if ($arr = arr_diff($a1[$k], $a2[$k]))
$ar[$k] = $arr;
}
}
return $ar;
}

// example:

$arr1 = array(
‘user1′ => array(
‘name’ => ‘john d.’,
’street’ => ‘elmstreet no. 2′,
‘city’ => ‘berlin’
),
‘user2′ => array(
‘name’ => ‘harald c.’,
’street’ => ‘b-street no. 7′,
‘city’ => ‘cologne’
)
);
$arr2 = array(
‘user1′ => array(
‘name’ => ‘john b.’, // change #1
’street’ => ‘elmstreet no. 2′,
‘city’ => ‘berlin’
),
‘user2′ => array(
‘name’ => ‘harald c.’,
’street’ => ‘b-street no. 7′,
‘city’ => ‘bavaria’ // change #2
)
);
print_r(arr_diff($arr1, $arr2));

/*
will output:

Array
(
[user1] => Array
(
[name] => john b.
)

[user2] => Array
(
[city] => bavaria
)

)

*/

?>

类别PHP 标签
  1. puma ferrari
    发表于 2010年06月13号 15时03分39秒 | 1楼

    cool I like it.

  2. Herve Leger Sale
    发表于 2010年06月21号 11时23分46秒 | 2楼

    Let us wait and see and hope for the best.

  3. timberland boots
    发表于 2010年06月30号 08时50分36秒 | 3楼

    I see Good Times ahead!!

  4. Herve Leger Dresses on Sale
    发表于 2010年07月19号 17时42分58秒 | 4楼

    Looking forward to “Writing – II”!

  5. MBT Shoes Outlet
    发表于 2010年07月19号 22时01分11秒 | 5楼

    What a refreshing post!!!

  6. marc jacobs handbag
    发表于 2010年07月19号 22时06分36秒 | 6楼

    history again.

  7. nike basketball shoes
    发表于 2010年07月24号 22时51分46秒 | 7楼

    have a deeper meaning.

  8. lebron shoes
    发表于 2010年08月06号 10时17分15秒 | 8楼

    i just read your marvelous tale! fantastic!

  1. 目前没有通告