FROM : http://blog.csdn.net/lcion/article/details/8985220

今天完成一个算法的过程中,有几个需求模块,其中就有判断$a数组是否是$b数组的子集,可能最近我写c比较多,直接就用for循环实现了,但是感觉代码量比较大,不够优雅!在qq群里集思广益了一下,发现很多php提供的系统功能函数都是可以供调用的,这里记录一下

需求
最少的时间复杂度判断$a数组是否是$b数组的子集

// 快速的判断$a数组是否是$b数组的子集
$a = array(135,138);
$b = array(135,138,137);

实现方法
这里介绍三种方法,思路其实是相同的,差别在于实现的代码上

 
for循环遍历
  1. $flag = 1;
  2. foreach ($a as $va) {
  3. if (in_array($va, $b)) {
  4. continue;
  5. }else {
  6. $flag = 0;
  7. break;
  8. }
  9. }
  10. if ($flag) {
  11. echo "Yes";
  12. }else {
  13. echo "No";
  14. }
  15. $flag = 1;
  16. foreach ($a as $va) {
  17. if (in_array($va, $b)) {
  18. continue;
  19. }else {
  20. $flag = 0;
  21. break;
  22. }
  23. }
  24. if ($flag) {
  25. echo "Yes";
  26. }else {
  27. echo "No";
  28. }

array_diff的使用

  1. $c = array_diff($a, $b);
  2. print_r($c);
  3. $flag = empty($c)?1 : 0;
  4. if ($flag) {
  5. echo "Yes";
  6. }else {
  7. echo "No";
  8. }
  9. $c = array_diff($a, $b);
  10. print_r($c);
  11. $flag = empty($c)?1 : 0;
  12. if ($flag) {
  13. echo "Yes";
  14. }else {
  15. echo "No";
  16. }

array_intersect的使用

  1. if ($a == array_intersect($a, $b)) {
  2. $flag = 1;
  3. }else {
  4. $flag = 0;
  5. }
  6. if ($flag) {
  7. echo "Yes";
  8. }else {
  9. echo "No";
  10. }
  11. if ($a == array_intersect($a, $b)) {
  12. $flag = 1;
  13. }else {
  14. $flag = 0;
  15. }
  16. if ($flag) {
  17. echo "Yes";
  18. }else {
  19. echo "No";
  20. }

[转]php判断一个数组是另一个数组的子集的更多相关文章

  1. 将对象的所有属性名放到一个数组中 || 获得对象的所有属性名 || return;不具有原子性 || 怎样自己制作异常|| 判断对象有没有某个属性 || 当传递的参数比需要的参数少的时候,没有的值会被赋予undefined || 获得函数实际传递的参数 || 怎么用函数处理一个对象 || 用一个名字空间定义一个模块所有的函数 || 给一个对象添加方法

    获得对象的所有属性名 || 将对象o的所有属性名放到数组中 var o = {x:1,y:2,z:3}; var arr = []; var i = 0; for(arr[i++] in o){};/ ...

  2. 面试题:给定一个长度为N的数组,其中每个元素的取值范围都是1到N。判断数组中是否有重复的数字

    题目:给定一个长度为N的数组,其中每个元素的取值范围都是1到N.判断数组中是否有重复的数字.(原数组不必保留) 方法1.对数组进行排序(快速,堆),然后比较相邻的元素是否相同.时间复杂度为O(nlog ...

  3. 假如数组接收到一个null,那么应该怎么循环输出。百度结果,都需要提前判断。否则出现空指针异常。。我还是想在数组中实现保存和输出null。

    假如数组接收到一个null,那么应该怎么循环输出.因为foreach与obj.length都会报错.null不是对象,foreach中不能赋值? sp页面forEach一个存放对象的集合,怎么判断其中 ...

  4. php判断一个数组是另一个数组的子集

    需求最少的时间复杂度判断$a数组是否是$b数组的子集 // 快速的判断$a数组是否是$b数组的子集$a = array(135,138);$b = array(135,138,137); 实现方法 这 ...

  5. js对Date对象的操作的问题(生成一个倒数7天的数组)

    今天在论坛上看到这样一个问题如下: 问题描述: 使用JavaScript生成一个倒数7天的数组.比如今天是10月1号,生成的数组是["9月25号","9月26号" ...

  6. 一个简单的XML与数组之间的转换

    xml是网络使用最多的数据交换格式,所以,不掌握怎么操作它,又有蛋疼的了. php中可以操作xml的类/函数很多,个人认为最简单的是SimpleXMLElement这个类,它的使用就跟其名字一样:简单 ...

  7. 一个简单的算法,定义一个长度为n的数组,随机顺序存储1至n的的全部正整数,不重复。

    前些天看到.net笔试习题集上的一道小题,要求将1至100内的正整数随机填充到一个长度为100的数组,求一个简单的算法. 今天有空写了一下.代码如下,注释比较详细: using System; usi ...

  8. 一个大小为N的数组,里面是N个整数,怎样去除重复的数

    题目:一个大小为N的数组,里面是N个整数,怎样去除重复的数字: 要求时间复杂度为O(n),空间复杂度为O(1). 需要除掉重复的整数的数组,注意这里我没有处理负数情况,其实负数情况只要先用0快排分一下 ...

  9. 如果一个Object对象可能是数组那么如何对其进行迭代

    需求:一个方法传入的参数是Object类型(假设对象为“items”,使用Object类型也是为了使用多态而增加方法复用性),但已知这个Object对象可能是基本类型数组,也可能是对象数组,如何将这个 ...

随机推荐

  1. 黑马程序员_java基础笔记(13)...类加载器和代理

    —————————— ASP.Net+Android+IOS开发..Net培训.期待与您交流! —————————— 1,类加载器.2,代理. 1,类加载器. Java虚拟机中可以安装多个类加载器,系 ...

  2. University Entrace Examination zoj1023

    学校招收学生   优先级按照:  分数  是否本地  志愿先后 相当于 女的开后宫 对gs进行略微修改 结束的条件为每个男的表白完所有女的 第二部分比较时    找出女的后宫里的吸引力最弱的男的比较 ...

  3. Redis学习笔记11--Redis分布式

    Redis-2.4.15目前没有提供集群的功能,Redis作者在博客中说将在3.0中实现集群机制.目前Redis实现集群的方法主要是采用一致性哈稀分片(Shard),将不同的key分配到不同的redi ...

  4. 学习linux-基础-操作系统结构

    操作系统结构图 物理层: CPU:( Central Processing Unit)是一块超大规模的集成电路,是一台计算机的运算核心(Core)和控制核心( Control Unit).它的功能主要 ...

  5. Linux-c系统编程

    进程相关的概念 程序和进程 程序:二进制文件.占用磁盘空间 进程:运行着的程序,数据在内存中,占用系统资源,CPU,物理内存() PCB描述进程(进程控制块) 把描述进程的所有信息的那条记录叫做 PC ...

  6. fatal error C1060:compiler is out of heap space

    今天svn update了下代码,rebuild工程的时候报错: fatal error C1060:compiler is out of heap space 意思是说编译器堆内存不足 百度结果:V ...

  7. java 注解 总结

    http://www.importnew.com/23564.html 注解的好处: 1.能够读懂别人写的代码,特别是框架相关的代码. 2.本来可能需要很多配置文件,需要很多逻辑才能实现的内容,就可以 ...

  8. activiti初学

    公司现有的工作流是比较老的JBPM,用起来不太方便,经常性的流程跑一半就停止不前了.闲暇之余学习下activiti的使用,基本配置如下: 1.创建pom.xml文件所依赖的jar包 <proje ...

  9. python面向对象魔术方法补充

    一.描述符 在 面向对象 编程中 定义一个(没有定义方法)类:class person , 在这个类里面,有name,age, heigth, weight,等等属性, 这个类就可以看作一个对 per ...

  10. gdb 调试及优化

    调试程序时,在gdb内p var,会提示 No symbol "var" in current context. 即使没有使用任何编译优化选项,仍然不能查看,可能是这些变量被优化到 ...