并集

array_merge

合并一个或多个数组。一个数组中的值附加在前一个数组的后面,返回作为结果的数组。

别忘了数字键名将会被重新编号!

$array1 = array("color" => "red", 2, 4);
$array2 = array("a", "b", "color" => "green", "shape" => "trapezoid", 4);
$result = array_merge($array1, $array2);
print_r($result);Array
([color] => red[0] => 2[1] => 4
)
Array
([0] => a[1] => b[color] => green[shape] => trapezoid[2] => 4
)
Array
([color] => green[0] => 2[1] => 4[2] => a[3] => b[shape] => trapezoid[4] => 4
)

如果你想完全保留原有数组并只想新的数组附加到后面,用 + 运算符。如果两个被合并的数组含有相同的key,则保留第一个,忽略后边的。

$array1 = array(0 => 'zero_a', 2 => 'two_a', 3 => 'three_a');
$array2 = array(1 => 'one_b', 3 => 'three_b', 4 => 'four_b');
$result = $array1 + $array2;
print_r($result);Array
([0] => zero_a[2] => two_a[3] => three_a[1] => one_b[4] => four_b
)

差集

array_diff

计算数组的差集

array array_diff ( array $array1 , array $array2 [, array $... ] )

对比返回在 array1 中但是不在 array2 及任何其它参数数组中的值。

返回一个数组,该数组包括了所有在 array1 中但是不在任何其它参数数组中的值。注意键名保留不变。

$array1 = array("a" => "green", "red", "blue", "red");
$array2 = array("b" => "green", "yellow", "red");
$result = array_diff($array1, $array2);
print_r($result);Array
([1] => blue
)

array_diff_key

使用键名比较计算数组的差集

本函数和 array_diff() 相同只除了比较是根据键名而不是值来进行的。

$array1 = array('blue'  => 1, 'red'  => 2, 'green'  => 3, 'purple' => 4);
$array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan'   => 8);
$result = array_diff_key($array1, $array2);
print_r($result);Array
([red] => 2[purple] => 4
)

array_diff_assoc

带索引检查计算数组的差集

注意和 array_diff() 不同的是键名也用于比较。

$array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");
$array2 = array("a" => "green", "yellow", "red");
$result = array_diff_assoc($array1, $array2);
print_r($array1);
print_r($array2);
print_r($result);Array
([a] => green[b] => brown[c] => blue[0] => red
)
Array
([a] => green[0] => yellow[1] => red
)
Array
([b] => brown[c] => blue[0] => red
)

可以看到键值对 “a” => “green” 在两个数组中都有,因此不在本函数的输出中。键值对 0 => “red” 出现在输出中是因为第二个参数中的 “red” 的键名是 1。

$array1 = array(0, 1, 2);
$array2 = array("00", "01", "2");
$result = array_diff_assoc($array1, $array2);
print_r($result);Array
([0] => 0[1] => 1
)

键值对 key => value 中的两个值仅在 (string) elem1===(string)elem1 === (string) elem2 时被认为相等。也就是说使用了严格检查,字符串的表达必须相同。

array_udiff

用回调函数比较数据来计算数组的差集

array array_udiff ( array $array1 , array $array2 [, array $ ... ], callable $data_compare_func )

array_udiff() 返回一个数组,该数组包括了所有在 array1 中但是不在任何其它参数数组中的值。注意键名保持不变。数据的比较是用 data_compare_func 进行的。如果认为第一个参数小于,等于,或大于第二个参数时必须分别返回一个小于零,等于零,或大于零的整数。这和 array_diff() 不同,后者使用了内部函数来比较数据。

class cr {private $priv_member;function cr($val){$this->priv_member = $val;}static function comp_func_cr($a, $b){if ($a->priv_member === $b->priv_member) return 0;return ($a->priv_member > $b->priv_member)? 1:-1;}
}
$a = array("0.1" => new cr(9), "0.5" => new cr(12), 0 => new cr(23), 1=> new cr(4), 2 => new cr(-15),);
$b = array("0.2" => new cr(9), "0.5" => new cr(22), 0 => new cr(3), 1=> new cr(4), 2 => new cr(-15),);
$result = array_udiff($a, $b, array("cr", "comp_func_cr"));
print_r($result);Array
([0.5] => cr Object([priv_member:cr:private] => 12)[0] => cr Object([priv_member:cr:private] => 23))

array_diff_ukey

用回调函数对键名比较计算数组的差集

function key_compare_func($key1, $key2)
{if ($key1 == $key2)return 0;else if ($key1 > $key2)return 1;elsereturn -1;
}
$array1 = array('blue'  => 1, 'red'  => 2, 'green'  => 3, 'purple' => 4);
$array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan'   => 8);
print_r(array_diff_ukey($array1, $array2, 'key_compare_func'));Array
([red] => 2[purple] => 4
)

array_diff_uassoc

用用户提供的回调函数做索引检查来计算数组的差集

compare KEYS with custom comparison functions and values with default comparison function

array_udiff_assoc

带索引检查计算数组的差集,用回调函数比较数据

compare VALUES with custom comparison function and keys with default comparison function

function compare_func($a, $b) {if(abs($a) == abs($b)) return 0;return (abs($a) > abs($b))?1:-1;
}
$test1 = array(1   =>  "a",2   =>  "b",3   =>  "c"
);
$test2 = array(-1  =>  "a",-2  =>  "b",-3  =>  "c"
);
print_r(array_diff_uassoc($test1, $test2, "compare_func"));
print_r(array_udiff_assoc($test1, $test2, "compare_func"));Array
(
)
Array
([1] => a[2] => b[3] => c
)

array_udiff_uassoc

带索引检查计算数组的差集,用回调函数比较数据和索引

compare both KEYS and VALUES with a custom comparison function


交集

array_intersect

计算数组的交集

$array1 = array("a" => "green", "red", "blue");
$array2 = array("b" => "green", "yellow", "red");
$result = array_intersect($array1, $array2);
print_r($result);Array
([a] => green[0] => red
)

array_intersect_key

使用键名比较计算数组的交集

$array1 = array('blue'  => 1, 'red'  => 2, 'green'  => 3, 'purple' => 4);
$array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan'   => 8);
$result = array_intersect_key($array1, $array2);
print_r($result);Array
([blue] => 1[green] => 3
)

array_intersect_assoc

带索引检查计算数组的交集

$array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");
$array2 = array("a" => "green", "b" => "yellow", "blue", "red");
$result = array_intersect_assoc($array1, $array2);
print_r($result);Array
([a] => green
)

array_uintersect

计算数组的交集,用回调函数比较数据

$array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");
$array2 = array("a" => "GREEN", "B" => "brown", "yellow", "red");
$result = array_uintersect($array1, $array2, "strcmp");
print_r($result);Array
([b] => brown[0] => red
)

array_intersect_ukey

用回调函数比较键名来计算数组的交集

$array1 = array('blue'  => 1, 'red'  => 2, 'green'  => 3, 'purple' => 4);
$array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan'   => 8);
$result = array_intersect_ukey($array1, $array2, 'strcmp');
print_r($result);Array
([blue] => 1[green] => 3
)

array_intersect_uassoc

带索引检查计算数组的交集,用回调函数比较索引

用自定义函数比较KEYS

array_uintersect_assoc

带索引检查计算数组的交集,用回调函数比较数据

用自定义函数比较VALUES

array_uintersect_uassoc

带索引检查计算数组的交集,用回调函数比较数据和索引

用自定义函数比较KEYS and VALUES

参考

  • PHP手册
  • https://gist.github.com/jmc734/6749235
  • https://www.reddit.com/r/PHP/comments/1ncqc0/real_difference_between_array_udiff_assoc_and/

PHP中的数组(集合)相关推荐

  1. c#sort升序还是降序_C#中对数组或集合进行升序或降序排序

    在.net framework中,数组和集合都实现了用于排序的方法sort(),数组通过调用Array.Sort(数组名)排序,集合通过调用 集合对象.Sort()方法排序. 默认的排序是使用升序排列 ...

  2. SpringMVC请求中的普通、POJO、数组集合类型传参与类转换器

    SpringMVC将传递的参数封装到处理器方法的形参中,达到快速访问参数的目的. 普通类型参数传参 参数名与处理器方法形参名保持一致 访问URL: http://localhost/requestPa ...

  3. myBatis的xml映射文件中传入list集合与数组做条件

    mybatis的xml映射文件中传入list集合与数组做条件 1.传list集合参数 1.1sql映射: <select id="queryDeptListByBankLevelAnd ...

  4. js中数据结构数组Array、映射Map、集合Set、对象、JSON

    全栈工程师开发手册 (作者:栾鹏) js系列教程5-数据结构和算法全解 js中数据结构 js中原生自带的数据结构比较简单,主要有数组Array.映射Map.集合Set.我们可以根据这三个基本数据结构实 ...

  5. js获取对象数组中的id集合

    js获取对象数组中的id集合 const ids = Array.from(this.checkList,({ id }) => id); // ["16921C72E0C64002& ...

  6. scala中打印数组和集合_如何在Scala中打印数组?

    scala中打印数组和集合 Scala中的数组 (Array in Scala) In Scala, Array is a data structure that is a collection of ...

  7. xml中遍历数组或集合

    xml中遍历数组或集合 数组.集合都可以(数组中数据格式可以是字符串/int)

  8. arcgis中判断某一字段值是否在list数组集合里(地理国情监测):

    arcgis中判断某一字段值是否在list数组集合里(地理国情监测): 在select by attribute工具: "Hebing" NOT IN ('4201G国道','42 ...

  9. Knockout中ko.utils中处理数组的方法集合

    每一套框架基本上都会有一个工具类,如:Vue中的Vue.util.Knockout中的ko.utils.jQuery直接将一些工具类放到了$里面,如果你还需要更多的工具类可以试试lodash.本文只介 ...

  10. 07JavaScript中的数组

    技术交流QQ群:1027579432,欢迎你的加入! 1.数组的概念 使用数组Array,可以把一组相关的数据存放在一起,并提供方便的访问(获取)方式. 数组是指一组数据的集合,其中的每个数据称为元素 ...

最新文章

  1. intellij idea 必知的debug功能
  2. Ubuntu中虚拟环境pip安装包超时问题
  3. 我在兰亭这三年之大促的那些事儿
  4. 5进程原语:execl(),execlp(),execle(),execv(),execvp(),execvp(),execve()
  5. Spring的IoC与DI差异
  6. 系统分析师视频教程下载
  7. 配置LANMP环境(9)-- 安装Git与vsftp
  8. 新增加的HTTP状态码 -- 103
  9. atitit 数据库mysq启动不起来解决方案.docx
  10. 社区奖品之USB电动迷你碎纸机
  11. android数码管字体,matplotlib绘图时显示额外的“figure”浮窗
  12. P4568 飞行路线
  13. 加拿大移民-雇主担保移民政策解读
  14. Aspose.Cells企业案例:Setec 为物联网传感器和能源节约和消耗生成自动内部报告
  15. python面向对象 : 反射和内置方法
  16. Latex公式及编号
  17. UDAL - DBProxy internal error问题解决
  18. Memcache/Redis集群管理探索与实现:美图开源PaaS平台资源网关
  19. 【论文精读】Temporal Fusion Transformers for Interpretable Multi-horizon Time Series Forecasting
  20. 计算机主机与显示器的接口是,电脑显示器的接口有哪些类型和区别

热门文章

  1. 用梯度下降求解最小二乘线性回归python实现
  2. Spark编程Tips
  3. python算法常用技巧与内置库
  4. html+加粗+w3c,HTML5教程:html标签属性通过w3c验证
  5. 安装i3_千元打造完美黑群晖——i3-8100,ITX蜗牛小机箱,显示CPU,支持Nvme缓存(硬件篇)...
  6. 国开大学计算机应用实操题作业如何上传,国开电大18秋《计算机应用基础》形考任务作业.doc...
  7. android指定分享到qq,Android使用系统分享文件给微信,QQ指定的用户
  8. mysql or 速度_mysql中or和in的效率问题
  9. 【少儿软件的定制】如何吸引少儿的学习兴趣?如何提高少儿学习软件的粘度?
  10. tp3.2 批量插入