元素与集合的问题思考
  TEZNKK3IfmPf 2024年05月17日 37 0

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

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

他给出代码如下:

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

或许你有更好的思路

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2024年05月17日 0

暂无评论

推荐阅读
  TEZNKK3IfmPf   2023年11月14日   104   0   0 leetcode元素
  TEZNKK3IfmPf   2024年03月29日   99   0   0 java元素
  TEZNKK3IfmPf   2023年11月15日   37   0   0 python集合
  TEZNKK3IfmPf   2023年11月14日   25   0   0 leetcode元素
  TEZNKK3IfmPf   2024年04月26日   22   0   0 集合
  TEZNKK3IfmPf   2024年05月31日   24   0   0 map集合
  TEZNKK3IfmPf   2024年03月29日   78   0   0 集合rediskey
TEZNKK3IfmPf