元素与集合的问题思考

发布时间:2017-7-9 7:22:00编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"元素与集合的问题思考 ",主要涉及到元素与集合的问题思考 方面的内容,对于元素与集合的问题思考 感兴趣的同学可以参考一下。

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

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

他给出代码如下:

<?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));?>

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


上一篇:Blueprint 编译概述
下一篇:TomCat系统架构

相关文章

相关评论

本站评论功能暂时取消,后续此功能例行通知。

一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!

二、互相尊重,对自己的言论和行为负责。

好贷网好贷款