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
|
<?php function 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 -1 debug key: 0 vs b -1 # $arr2 的key排序去重 debug key: b vs name -1 debug 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 -1 debug key: b vs b 0 #key相等,下步比较key对应的键值 debug value: bb vs bb 0 #key对应的键值也相等, $arr1 中键b和对应的键值bb不会出现在返回数组中 debug key: 1 vs 0 1 debug key: 1 vs b 1 debug key: 1 vs name 1 Array ( [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
|
<?php class 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 ...
随机推荐
- hdu6331 Walking Plan
题意: sol: 考虑floyed 直接暴力做的话复杂度是kn^3会炸. 考虑一个比较神仙的分块做法. 注意到我们是可以直接求单独某个k的矩阵,使用矩阵快速幂即可(取min的矩阵乘法). 单独求一次的 ...
- A Chess Game POJ - 2425
Let's design a new chess game. There are N positions to hold M chesses in this game. Multiple chesse ...
- logging addHandler(console)
import logging # set up logging to file - see previous section for more details logging.basicConfig( ...
- ECharts 报表事件联动系列一:刷新页面
本示例实现了以下功能: 1.点击刷新按钮,仅刷新柱状图,而不是整个页面 2.点击柱状内容刷新柱状图,并更新title 3.点击X轴,Y轴更新title,并弹出alert. 源码代码如下: <!D ...
- 【Linux】bash shell学习
Bash Shell Linux系统的合法shell都写入/etc/shells这个文件,默认使用的shell版本称为“Bourne Again Shell(简称bash)” 用户登录时系统会分配一个 ...
- 四、持久层框架(Hibernate)
一.一级缓存与二级缓存 1.一级缓存:Hibernate默认是开启一级缓存的,一级缓存存放在session里,一个Session做一次查询操作,会把这个操作的结果放在一级缓存中,如果短时间内这个ses ...
- Python3红楼梦人名出现次数统计分析
一.程序说明 本程序流程是读取红楼梦txt文件----使用jieba进行分词----借助Counter读取各人名出现次数并排序----使用matplotlib将结果可视化 这里的统计除了将“熙凤”出现 ...
- Oracle 如何循环查询结果集,进行新增或修改
Oracle的PL/SQL中怎样循环查询的结果集,然后根据查询结果进行判断,是新增或修改操作 loop循环例子 for item in (select a,b,c from table_a where ...
- TCP/IP报文 三次握手 四次挥手
1.TCP报文格式 TCP/IP协议的详细信息参看<TCP/IP协议详解>三卷本.下面是TCP报文格式图:图1 TCP报文格式 上图中有几个字段需要重点介绍下: (1)序号:Seq序 ...
- laravel中的plicy授权方法:
1.用命令新建policy: php artisan make:policy PostPolicy 2.在app/Policies/PostPolicy.php中添加处理文件的权限的方法: //修改: ...