array_udiff_uassoc
PHP array_udiff_uassoc 函数
计算出第一个数组与其他数组的差集(考虑键名和键值,对键名和键值的比较都使用自定义函数)。比较两到多个数组,找出第一个数组中不包含在其他任何数组中的键/值对。此函数键值比较和键名比较都使用用户自定义函数。关于计算差集系列函数的区别请参考:PHP数组计算差集系列函数的区别。
二、函数语法:
|
1
|
array array_udiff_uassoc($array1 , $array2[, $...], $user_value_compare_func, $user_key_compare_func) |
三、函数参数:
| 参数名 | 描述 |
|---|---|
| $array1 | 参与比较的第一个数组; |
| $array2 | 参与比较的第二个数组; |
| ... | 参与比较的更多数组; |
| $user_value_compare_func | 用户自定义回调函数,用来比较键值。如果认为第一个键值小于,等于,或大于第二个键值时必须分别返回一个小于零,等于零,或大于零的整数。只有键名比较返回0,对应的键值才会传递给此自定义函数比较。 |
| $user_key_compare_func | 用户自定义回调函数,用来比较键名。如果认为第一个键名小于,等于,或大于第二个键名时必须分别返回一个小于零,等于零,或大于零的整数。 |
四、返回值:
|
1
|
返回第一个数组与其他数组的键名/键值对差集组成的数组。 |
五、用法举例:
1、array_udiff_uassoc 函数工作流程解析:
大体分为3步:1、每个数组key的排序去重;2、判断第一个数组的key是否与其他数组的key相等,如果相等返回0,然后执行第3步;3、判断第2步相等的key对应的值是否相等,相等返回0,此key和对应的值不会再出现在返回数组中,执行第1步比较下一对key。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
<?phpfunction user_key_compare_func($k1, $k2) { echo sprintf("debug key: %s vs %s %s\n", $k1, $k2, $k1===$k2 ? 0 : ($k1>$k2?1:-1) ); //debug行 if ( $k1 === $k2 ) { return 0; } return $k1 > $k2 ? 1 : -1;} function user_value_compare_func($v1, $v2) { echo sprintf("debug value: %s vs %s %s\n", $v1, $v2, $v1===$v2 ? 0 : ($v1>$v2?1:-1) ); //debug行 if ( $v1 === $v2 ) { return 0; } return $v1 > $v2 ? 1 : -1;} $arr1 = array('爱E族', 'aiezu', 'b'=>'bb',);$arr2 = array('name'=>'爱E族', 'b'=>'bb', 'aiezu'); $result = array_udiff_uassoc($arr1, $arr2, "user_value_compare_func", "user_key_compare_func");print_r($result); |
输出:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
debug key: 1 vs 0 1 #$arr1的key排序去重debug key: b vs 1 -1debug key: 0 vs b -1 #$arr2的key排序去重debug key: b vs name -1debug key: 0 vs b -1 #key不相等debug key: 0 vs 0 0 #key相等,下步比较key对应的键值debug value: 爱E族 vs aiezu 1 #key对应的键值不相等,key:0,value:爱E族会出现在返回数组中debug key: b vs 0 -1debug key: b vs b 0 #key相等,下步比较key对应的键值debug value: bb vs bb 0 #key对应的键值也相等,$arr1中键b和对应的键值bb不会出现在返回数组中debug key: 1 vs 0 1debug key: 1 vs b 1debug key: 1 vs name 1Array( [0] => 爱E族 [1] => aiezu) |
2、使用类函数作为键值和键名比较函数,找出三个数组的差集:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
<?phpclass user { function key_compare($k1, $k2) { if ( $k1 === $k2 ) { return 0; } return $k1 > $k2 ? 1 : -1; } function value_compare($v1, $v2) { if ( $v1 === $v2 ) { return 0; } return $v1 > $v2 ? 1 : -1; }}$arr1 = array('爱E族', 'aiezu', 'b'=>'bb',);$arr2 = array('name'=>'爱E族', 'b'=>'bb', 'aiezu');$arr3 = array('1'=>'aiezu');$result = array_udiff_uassoc($arr1, $arr2, $arr3, array("user", "value_compare"), array("user", "key_compare"));print_r($result); |
输出:
|
1
2
3
4
|
Array( [0] => 爱E族) |
array_udiff_uassoc的更多相关文章
- php array_udiff_uassoc比较数组的键值与值
php array_udiff_uassoc 用于带索引检查计算数组的差集,用回调函数比较数据和索引.本文章通过实例向大家介绍array_udiff_uassoc函数的使用方法.需要的码农可以参考一下 ...
- array_udiff、array_udiff_assoc、array_udiff_uassoc 使用方法
<?php // array_udiff 用自定义函数比较数组的差值(array_diff 使用内置函数) // 使用该函数我们通过进行更复杂的比较 class Rectangle { pu ...
- PHP array_udiff_uassoc
1.函数的参数:返回数组的差集.用定义的函数比较键值和值. 2.函数的参数: @params array $array @params array $array1 ... @params callab ...
- PHP array_udiff_uassoc() 函数
实例 比较两个数组的键名和键值(使用用户自定义函数进行比较),并返回差集: <?phpfunction myfunction_key($a,$b){if ($a===$b){return 0;} ...
- php 基础代码大全(不断完善中)
下面是基础的PHP的代码,不断完善中~ //语法错误(syntax error)在语法分析阶段,源代码并未被执行,故不会有任何输出. /* [命名规则] */ 常量名 类常量建议全大写,单词间用下划线 ...
- PHP数组函数总结
array_change_key_case - 返回字符串键名全为小写或大写的数组 array_chunk - 将一个数组分割成多个 array_column - 返回数组中指定的一列 array_c ...
- PHP7函数大全(4553个函数)
转载来自: http://www.infocool.net/kb/PHP/201607/168683.html a 函数 说明 abs 绝对值 acos 反余弦 acosh 反双曲余弦 addcsla ...
- php5 数据类型
一.PHP主要有一下几种数据类型 String(字符串), Integer(整型), Float(浮点型), Boolean(布尔型), Array(数组), Object(对象), NULL(空值) ...
- 两千行PHP学习笔记
亲们,如约而至的PHP笔记来啦~绝对干货! 以下为我以前学PHP时做的笔记,时不时的也会添加一些基础知识点进去,有时还翻出来查查. MySQL笔记:一千行MySQL学习笔记http://www.cnb ...
随机推荐
- day11-15,装饰器
day11 1.装饰器 import time # print(time.time()) # 点数前边是从1970年到现在过了多少秒 # time.sleep(10) # 让程序执行到这里停一会儿 # ...
- selenum threding多线程运行 实例
1.配置相关驱动 chrome驱动 下载驱动,配置到环境变量中 如 xxxxchrome.jar 将其新建目录c:/driver---将目录 配置到环境变量 firefox驱动 下载驱动,将gecko ...
- python记录_day05 字典
字典 字典由花括号表示{ },元素是key:value的键值对,元素之间用逗号隔开 特点:1.字典中key是不能重复的 且是不可变的数据类型,因为字典是使用hash算法来计算key的哈希值,然后用哈希 ...
- git clone项目
1. 生成公钥和私钥 ssh-keygen 2. 将公钥添加到github或者gitlab上,一般github或者gitlab允许添加多个公钥,可能是考虑到用户使用不同的机器了吧,还是很贴心的. 3. ...
- InnoDB存储引擎介绍-(5) Innodb逻辑存储结构
如果创建表时没有显示的定义主键,mysql会按如下方式创建主键: 首先判断表中是否有非空的唯一索引,如果有,则该列为主键. 如果不符合上述条件,存储引擎会自动创建一个6字节大小的指针. 当表中有多个非 ...
- [luogu P3275] [SCOI2011]糖果
[luogu P3275] [SCOI2011]糖果 题目描述 幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果.但是小朋友们也有嫉妒心,总是会提出一些 ...
- java后台判断浏览器的版本
public static void main(String[] args) { String agent=request.getHeader("User-Agen ...
- PL/SQL Developer安装教程
1.下载:http://pan.baidu.com/s/1qYtvy1I密码:451g instantclient官方下载链接:http://www.oracle.com/technetwork/to ...
- 微信小程序 HMACSHA256 哈希加密
下载CryptoJS, 增加红色的这句 module.exports = CryptoJS /* CryptoJS code.google.com/p/crypto-js (c) 2009-2012 ...
- Lamda 表达式里的Join和GroupJoin的区别, 如何实现SQL的Left Join效果
例如,可以将产品表与产品类别表相联接,得到产品名称和与其相对应的类别名称 db.Products .Join ( db.Categories, p => p.CategoryID, c => ...