比較兩個數組的鍵名和索引值,並返回差集:
<?php$a1=array("a"=>"red","b"=>"green","c"=>"blue","d"=>"yellow");$a2=array("a"=>"red","b"=>"green","c"=>"blue");$result=array_diff_assoc($a1,$a2);print_r($result);?>
定義和用法
array_diff_assoc() 函數用於比較兩個(或更多個)數組的鍵名和索引值 ,並返回差集。
該函數比較兩個(或更多個)數組的鍵名和索引值,並返回一個差集數組,該數組包括了所有在被比較的數組(array1)中,但是不在任何其他參數數組(array2 或 array3 等等)中的鍵名和索引值。
文法
array_diff_assoc(array1,array2,array3...);
參數 描述
array1 必需。與其他數組進行比較的第一個數組。
array2 必需。與第一個數組進行比較的數組。
array3,... 可選。與第一個數組進行比較的其他數組。
返回一個差集數組,該數組包括了所有在被比較的數組(array1)中,但是不在任何其他參數數組(array2 或 array3 等等)中的鍵名和索引值。
比較兩個數組的鍵名和索引值,並返回差集:
<?php$a1=array("a"=>"red","b"=>"green","c"=>"blue","d"=>"yellow");$a2=array("e"=>"red","f"=>"green","g"=>"blue");$result=array_diff_assoc($a1,$a2);print_r($result);?>
比較三個數組的鍵名和索引值,並返回差集:
<?php$a1=array("a"=>"red","b"=>"green","c"=>"blue","d"=>"yellow");$a2=array("a"=>"red","f"=>"green","g"=>"blue");$a3=array("h"=>"red","b"=>"green","g"=>"blue");$result=array_diff_assoc($a1,$a2,$a3);print_r($result);?>
一:使用array_diff和array_diff_assoc前奏
在商城開發中,經常要用到對資料的增刪改查。其中,資料的更新,很多時候我們只需要對其中的一個欄位,或者部分欄位進行更新,而不需要全部欄位一起更新,那麼這裡就需要找出哪些是需要更新的,哪些是不需要更新的。array_diff和array_diff_assoc均可以檢查數組的差值,我們只需對比從資料庫中擷取的要更新的舊資料數組和提交的新資料數組作比較,array_diff和array_diff_assoc均可返回差數組。
二:學習array_diff 和array_diff_assoc
array_diff()
array array_diff( array $array1 , array $array2 [, array $... ] ),返回一個數組,數組中包括了array1中所有與其 他數組不同值的元素,另外對應的鍵名保留。但該函數只能對多維陣列的第一維進行差值比較。而且這種對比時只對索引值的對比,與鍵 名無關(只會找兩個(或兩個以上)數組中索引值有區別的值)。
例子:array_diff可以找出倆數組的差值c_pid:
但是,如果array的任一索引值和更改的值有重疊,則array_diff無法測出此更改值,如下:
正常情況下array1中和array2中的比較中,更新的元素有c_pid和c_order,但結果只得到c_order的差 值,為什麼呢?
個人理解:array_diff()將array1的值和array2的值做對比,而不考慮鍵名,所以array1的c_pid的值 在array2的c_level中找到,故忽略c_pid的差值。
array_diff_assoc()
這個就不詳細講了,它和array_diff()用法一樣,不同的是,它的比較是帶上鍵名的,也就是說它找到的就是幾個數組中鍵名相同索引值不同的項,也就是說,上面array_diff的第二種情況它是可以找出c_pid和c_order兩個差值的。各位看官如果不信,可以動手試試。小弟新手一枚,萬事開頭難,第一次寫博文,即使有點菜,希望各路大神海涵。