亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > PHP > 正文

淺談PHP源碼十八:關于array_diff_key,array_diff_assoc,array_udiff_asso

2020-03-22 17:45:21
字體:
來源:轉載
供稿:網友
首頁 > html' target='_blank'>php教程 > php教程 > 正文 淺談PHP源碼十八:關于array_diff_key,array_diff_assoc,array_udiff_assoc 函數 2018-06-28 17:37:49 第六期線上培訓班
這篇文章主要介紹了關于淺談PHP源碼十八:關于array_diff_key,array_diff_assoc,array_udiff_assoc 函數,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

淺談PHP源碼十八:關于array_diff_key,array_diff_assoc,array_udiff_assoc 函數

【array_diff_key】

(PHP 5 = 5.1.0RC1)
array_diff_key — 使用鍵名比較計算數組的差集
說明

array array_diff_key ( array array1, array array2 [, array ...] )

array_diff_key() 返回一個數組,該數組包括了所有出現在 array1 中但是未出現在任何其它參數數組中的鍵名的值。注意關聯關系保留不變。

【array_diff_assoc】

(PHP 4 = 4.3.0, PHP 5)
array_diff_assoc — 帶索引檢查計算數組的差集
說明

array array_diff_assoc ( array array1, array array2 [, array ...] )

array_diff_assoc() 返回一個數組,該數組包括了所有在 array1 中但是不在任何其它參數數組中的值。注意和 array_diff() 不同的是鍵名也用于比較。

之所以把這三個函數放在一起是因為他們調用的最后是一個函數:php_array_diff_key
【array_diff_uassoc】

(PHP 5)
array_diff_uassoc — 用用戶提供的回調函數做索引檢查來計算數組的差集
說明

array array_diff_uassoc ( array array1, array array2 [, array ..., callback key_compare_func] )

array_diff_uassoc() 返回一個數組,該數組包括了所有在 array1 中但是不在任何其它參數數組中的值。

這三個函數調用php-array_diff_key的方式如下:

 array_diff_key: php_array_diff_key(INTERNAL_FUNCTION_PARAM_PASSTHRU, DIFF_COMP_DATA_NONE);array_diff_assoc: php_array_diff_key(INTERNAL_FUNCTION_PARAM_PASSTHRU, DIFF_COMP_DATA_INTERNAL);array_udiff_assoc: php_array_diff_key(INTERNAL_FUNCTION_PARAM_PASSTHRU, DIFF_COMP_DATA_USER);

其中參數的宏定義如下:

 #define INTERNAL_FUNCTION_PARAM_PASSTHRU ht, return_value, return_value_ptr, this_ptr, return_value_used TSRMLS_CC #define DIFF_COMP_DATA_NONE -1#define DIFF_COMP_DATA_INTERNAL 0#define DIFF_COMP_DATA_USER 1

php_array_diff_key函數首先要根據傳入的data_compare_type(即上面定義的三個宏),判斷所要使用的比較函數,然后遍歷第一個數組,針對每一個元素與其它數組比較,看其它數字是否存在

如果存在則刪
針對此函數的源碼做一個注釋性的說明:

 for (i = 0; i argc; i++) { if (Z_TYPE_PP(args[i]) != IS_ARRAY) { php_error_docref(NULL TSRMLS_CC, E_WARNING, Argument #%d is not an array , i + 1); RETVAL_NULL(); goto out; // goto語句,這個貌似一般是高手用的,嘿嘿 array_init(return_value); // 返回數組初始化,初始化存儲此數組的Hash Table for (p = Z_ARRVAL_PP(args[0])- pListHead; p != NULL; p = p- pListNext) { // 遍歷第一個參數包含的雙向鏈表 if (p- nKeyLength == 0) { // 數組索引為數字 ok = 1; for (i = 1; i argc; i++) { // 對其它的數組進行判斷 if (zend_hash_index_find(Z_ARRVAL_PP(args[i]), p- h, (void**) data) == SUCCESS  (!diff_data_compare_func || diff_data_compare_func((zval**)p- pData, data TSRMLS_CC) == 0)) { ok = 0; break; if (ok) { 在第一個數組中,不在其它數組中 (*((zval**)p- pData))- refcount++; zend_hash_index_update(Z_ARRVAL_P(return_value), p- h, p- pData, sizeof(zval*), NULL); } else { // 索引為字符串 ok = 1; for (i = 1; i argc; i++) { if (zend_hash_quick_find(Z_ARRVAL_PP(args[i]), p- arKey, p- nKeyLength, p- h, (void**) data) == SUCCESS  (!diff_data_compare_func || diff_data_compare_func((zval**)p- pData, data TSRMLS_CC) == 0)) { ok = 0; break; if (ok) { (*((zval**)p- pData))- refcount++; zend_hash_quick_update(Z_ARRVAL_P(return_value), p- arKey, p- nKeyLength, p- h, p- pData, sizeof(zval*), NULL); }

關于比較函數:

DIFF_COMP_DATA_NONE參數對應的是NULL,即不存在比較,使用索引查找就可以了
DIFF_COMP_DATA_INTERNAL參數對應的是zval_compare,即索引和值都會比較
DIFF_COMP_DATA_USER參數對應的是zval_user_compare,即用戶自定義的函數

以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP !

相關推薦:

淺談PHP源碼十七:關于array_diff,array_udiff,array_diff_ukey,array_diff_uassoc,array_udiff_uassoc的介紹

淺談PHP源碼十六:關于array_count_values函數

淺談PHP源碼十五:關于array_walk函數

以上就是淺談PHP源碼十八:關于array_diff_key,array_diff_assoc,array_udiff_assoc 函數的詳細內容,PHP教程

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
丝袜亚洲另类欧美重口| 日韩毛片中文字幕| 亚洲人成在线观看网站高清| 91精品国产91久久久久久久久| 亚洲跨种族黑人xxx| 久久免费视频网| 国产一区二区日韩精品欧美精品| 日韩av免费在线观看| 欧美激情a∨在线视频播放| 欧美激情一区二区三级高清视频| 欧美激情视频在线观看| 欧美日韩国产综合视频在线观看中文| 欧美日韩国产精品一区二区三区四区| 亚洲激情自拍图| 另类视频在线观看| 久久国产精品首页| 亚洲乱码一区av黑人高潮| 亚洲国产精品嫩草影院久久| 国产91精品久久久| 国产色视频一区| 精品福利樱桃av导航| 国产剧情日韩欧美| 国产午夜精品视频免费不卡69堂| 日韩黄在线观看| 日韩av中文字幕在线免费观看| 亚洲欧美成人网| 国产成人精品在线观看| 欧美性xxxxxxx| 亚洲精品99久久久久| 最新日韩中文字幕| 亚洲国产成人精品一区二区| 欧美成人午夜剧场免费观看| 国产精品成人观看视频国产奇米| 欧美成人午夜激情视频| 69**夜色精品国产69乱| 亚洲伊人久久综合| 亚洲欧美日本另类| 欧美亚洲国产日韩2020| 久久久影视精品| 亚洲国产精品国自产拍av秋霞| 成人黄色免费看| 中文日韩电影网站| 国产性色av一区二区| 欧美日韩一区二区在线| 国产精品偷伦一区二区| 中文欧美在线视频| 国产日韩欧美综合| 欧美亚洲成人免费| 国产精品久久中文| 久久精品亚洲精品| 日韩亚洲国产中文字幕| 欧美亚洲免费电影| 国产97在线观看| 亚洲国产天堂久久国产91| 欧美激情精品久久久久久久变态| 97热精品视频官网| 日韩在线观看视频免费| 亚洲欧美日韩高清| 亚洲精品大尺度| 欧美午夜性色大片在线观看| 日韩成人激情影院| 最近2019好看的中文字幕免费| 欧美日韩爱爱视频| 欧美亚洲日本网站| 亚洲欧洲激情在线| 最新亚洲国产精品| 中文字幕日韩在线播放| 91网站免费观看| 久国内精品在线| 欧美亚洲另类在线| 欧美精品激情视频| 成人免费自拍视频| 亚洲精品91美女久久久久久久| 国产精品偷伦视频免费观看国产| 亚洲人成电影在线播放| 国产亚洲aⅴaaaaaa毛片| 亲爱的老师9免费观看全集电视剧| 97激碰免费视频| 精品毛片三在线观看| 97精品久久久中文字幕免费| 久久精品人人做人人爽| 欧美日韩亚洲激情| 亚洲综合最新在线| 亚洲激情第一页| 国产精品揄拍500视频| 8090理伦午夜在线电影| 国产成人精品综合| 精品一区二区三区电影| 欧美精品午夜视频| 在线观看亚洲视频| 久久精品国产亚洲精品| 欧美性猛交xxxx乱大交3| 久久伊人91精品综合网站| 欧美精品aaa| 亚洲天堂av在线免费| 久久久久久国产精品美女| 亚洲大胆人体av| 欧美午夜性色大片在线观看| 久久国产视频网站| 久久久久久久久网站| 国产91精品久久久久久久| 亚洲综合成人婷婷小说| 国产97人人超碰caoprom| 中文字幕欧美日韩精品| 欧美制服第一页| 国产精品视频一区二区高潮| 国产精品激情av在线播放| 国产精品一二三视频| 久久九九全国免费精品观看| 91精品91久久久久久| 这里只有视频精品| 97在线看免费观看视频在线观看| 国产香蕉精品视频一区二区三区| www国产精品com| 91精品国产高清自在线看超| 国产精品精品一区二区三区午夜版| 精品偷拍各种wc美女嘘嘘| 4438全国成人免费| 亚洲iv一区二区三区| 国产精品久久久久久超碰| 精品亚洲夜色av98在线观看| 97视频在线观看播放| 亚洲最大av网站| 丝袜亚洲另类欧美重口| 久久青草福利网站| 欧美亚洲国产另类| 色综合亚洲精品激情狠狠| 国产成人亚洲综合91| 欧美日韩成人在线视频| 亚洲一区制服诱惑| 国产a∨精品一区二区三区不卡| 亚洲综合成人婷婷小说| 精品激情国产视频| 成人a免费视频| 欧美日韩在线视频观看| 国产成人精品免费久久久久| 欧美成人黑人xx视频免费观看| 久久久亚洲天堂| 欧美精品国产精品日韩精品| 日本欧美精品在线| 久久久久久一区二区三区| 91精品国产91久久久久福利| 日韩中文理论片| 亚洲欧美激情视频| 这里只有精品丝袜| 97国产精品免费视频| 91精品国产91久久久久久吃药| 免费av一区二区| 日韩精品免费观看| 国产精品视频公开费视频| 国产精品免费电影| 欧美黑人巨大精品一区二区| 97av在线影院| 国产日韩在线观看av| 亚洲精品中文字幕女同| 久久久亚洲欧洲日产国码aⅴ| 91高清免费视频| 亚洲天堂久久av| 欧美激情a∨在线视频播放| 欧美激情va永久在线播放| 国产不卡av在线| 国产精品久久久久久久久久尿| 欧美日韩在线看| 欧美日韩国产一区二区三区|