比較兩個陣列的鍵名和鍵值,並傳回差集:
<?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 $ 1 , array $array2 [, array $... ] ),時返回一個數組,在數組中包括了一個數字組與其 他數組不同值的元素,另外對應的鍵名保留。但函數只能對多維數組的第一維進行差值比較。而這個對比時只對鍵值的對比,與鍵 名無關(只會找兩個(或兩個以上)數組中鍵值有區別的值)。
範例: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兩個差值的。各位看官如果不信,可以動手試試。小弟新手一枚,萬事開頭難,第一次寫博文,即使 有點菜,希望各路大神海涵。
以上是詳解php中array_diff_assoc()函數的詳細內容。更多資訊請關注PHP中文網其他相關文章!