元素与集合的问题思考
今天同事遇到一个元素和集合的问题,引发了我的思考。情景如下
一个元素和集合,如果元素在集合内,则移除该集合内的这个元素,否则添加该元素进入这个集合。
他给出代码如下:
<?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)); ?>
或许你有更好的思路,欢迎留言
分类:
杀鸡要用宰牛刀
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战