今天同事遇到一个元素和集合的问题,引发了我的思考。情景如下

一个元素和集合,如果元素在集合内,则移除该集合内的这个元素,否则添加该元素进入这个集合。

他给出代码如下:

<?php
$value=5;
$list=array(1,2,3,4,5,6,7,8,9,10);
if(empty($list) || !in_array($value,$list) )
{$list[] = $value;
}else
{foreach($list as $k => $v){if($v == $value){unset($list[$k]);}}
}
?>

这个模式比较基础化,也很容易理解,不过针对这个foreach,我们都有一点顾及,于是修改了一下

<?php
$value=5;
$list=array(1,2,3,4,5,6,7,8,9,10);
if(empty($list) || !in_array($value,$list) )
{$list[] = $value;
}else
{$search_key=array_search($value,$list);unset($list[$search_key]);
}
?>

这个改进去掉了foreach的循环,实际上,是使用 array_search代替了foreach。

小小的问题突然引发了我的思考,这个array_search  in_array  empty好像有点重复了,于是我想到另一种写法

<?php
$value=5;
$list=array(1,2,3,4,5,6,7,8,9,10);
$search_key=array_search($value,$list);
if($search_key!==false)
{unset($list[$search_key]);
}else
{$list[] = $value;
}
?>

之前在做编辑更新绑定关系的时候,我记得我也处理过类似问题,是一种集合差集的概念,于是我想到这样写

<?php
$value=5;
$list=array(1,2,3,4,5,6,7,8,9,10);
if(in_array($value,$list))
{$value=(array)$value;//单个元素转数组$list=array_diff($list,$value);//数组求差集
}else
{$list[]=$value;//放入数组
}
?>

如果换一种思路,采用字符串处理,又该如何解决呢?

字符串的查找 替换 拼接给了我一定的灵感,代码如下

<?php
$value=5;
$list=array(1,2,3,4,5,6,7,8,9,10);
$delimiter=",";
$value=$delimiter.$value.$delimiter;
$list =$delimiter.implode($delimiter,$list).$delimiter;
if(strpos($list,$value)!==false)
{//找到了 删除$list=str_replace($value,$delimiter,$list);
}else{//没找到 添加$list=trim($list,$delimiter).$value;
}
$list=array_filter(explode($delimiter,$list));
?>

或许你有更好的思路,欢迎留言

转载于:https://www.cnblogs.com/lizhaoyao/p/7098187.html

元素与集合的问题思考相关推荐

  1. golang 排序list_Go语言使用sort包对任意类型元素的集合进行排序的方法

    本文实例讲述了Go语言使用sort包对任意类型元素的集合进行排序的方法.分享给大家供大家参考.具体如下: 使用sort包的函数进行排序时,集合需要实现sort.Inteface接口,该接口中有三个方法 ...

  2. 【Groovy】集合遍历 ( 操作符重载 | 集合中的 “ << “ 操作符重载 | 使用集合中的 “ << “ 操作符添加一个元素 | 使用集合中的 “ << “ 操作符添加一个集合 )

    文章目录 一.集合中的 " << " 操作符重载 1.使用集合中的 " << " 操作符添加一个元素 2.使用集合中的 " & ...

  3. Java学习之容器上(Collection接口常用方法,Iterator接口,使用foreach循环遍历Collection集合元素,Set集合通用知识(Hashset类,hashcode()与Lin

    1.容器API的类图结构如下: JAVA的集合类是一种特别有用的工具类,它可以用于存储数量不等的多个对象,并可以实现常用数据结构,如栈,队列等,除此之外,JAVA集合还可用于保存具有映射关系的关联数组 ...

  4. set集合判断集合中是否有无元素_集合 (Set) | 一山不容二虎的 Python 数据类型

    点击上方"可乐python说"关注公众号,点击右上角 "..."选择"设为星标"第一时间获取最新分享! 前言 Hi,大家好,我是可乐, 今天 ...

  5. 离散数学反对称关系_【离散数学】1.2&1.3集合与元素,集合与集合之间的关系...

    离散数学是编程人员进阶的必修科目,是计算机专业学生的基础课程之一,多为理论性知识,较抽象. [离散数学]第一章(集合论基础)的小节主要有: 1.1集合的定义和表示 1.2集合与元素的关系 1.3集合与 ...

  6. LoadRunner几个重要的概念:事务、集合点、思考时间

    LoadRunner事务集合点思考时间  在LoadRunner的脚步编写中,有三个重要的概念:事务.集合点.思考时间 事务: 事务又称为Transaction,在LoadRunner中的定义如下:A ...

  7. android list 替换元素_Java 集合(二)——Set 集合、List 集合和 Collections 工具类...

    一.前言 在 Java 集合(一)中我们已经讲了 Collection 集合接口.Iterator 迭代器和泛型,今天我们来讲 Set 集合.List 集合 和 Collections 工具类. 二. ...

  8. python集合的元素可以是_Python - 集合与元素之集合定义和基本操作方法

    原博文 2019-10-05 14:58 − 集合(set) 定义:由不同元素组成的集合,集合中是一组无序排列可hash的值(不可变的值)例如数字.字符串.元组,可以作为字典的key 定义集合: # ...

  9. DOM初探(16)——查看元素的集合尺寸

    三:DOM基本操作: 查看元素的集合尺寸 domEle.getBoundingClientRect(); 兼容性很好 改方法返回一个对象,对象里面有left,top,right,bottom等属性.l ...

最新文章

  1. 日订单50万级分布式事务
  2. 最长上升子序列之基础
  3. Wannafly挑战赛22游记
  4. 快速使用Vue3最新的15个常用API
  5. NumPy 基础知识·翻译完成
  6. Python+numpy实现蒙特卡罗方法估计圆周率近似值
  7. java开发_mysql中获取数据库表描述_源码下载
  8. java 错误码设计_关于Java中异常的设计
  9. mysql lastid_轻松掌握MySQL函数中的last_insert_id()
  10. 【GD32L233C-START】11、GD32 ISP软件还不支持GD32L233
  11. 【图像特征提取】基于matlab脉冲耦合神经网络(PCNN)图像特征提取【含Matlab源码 1868期】
  12. p1530 Fractions to Decimals
  13. 史上最全:Jetbrains全家桶31款软件 分类+功能整理收集
  14. 重写equals方法原则
  15. C与C++中的常用符号与标点用法详解及实例
  16. P5266 【深基17.例6】学籍管理
  17. 羽毛球单打和双打的有效边界区域
  18. 靶机渗透-----DC-2
  19. 从DWG导入SKP的准备工作
  20. Java高级技术梳理

热门文章

  1. Android TextView,EditText要求固定行数自动调整TextSize
  2. python战斗2:看到一个页面编码
  3. 可执行镜像——开发环境的Docker化之路
  4. 如果安装License失败的解决方案
  5. CentOS英文版下安装中文语言包
  6. 八年级信息技术认识计算机网络,初二信息技术课名称:认识计算机网络.doc
  7. 【Mac Buf Install Solution】Mac Buf Not Provide support for this old version Solution
  8. 我将要关注的kaggle比赛
  9. c语言多线程面试题,iOS面试题--网络多线程
  10. Java Class 文件结构