输入某个字符,相当于退格键(删除),输入一个删除一个,输入一个删除一个。。。
行了,废话不多说了,直接上代码:
# 方法一:这是我原本的思路,运用了递归思想 function filterStr($str,$filter){ $long = strlen($str); $u = array(); for ($i=1; $i < $long; $i++) { if ($str[$i] == $filter) { $u[] = $i; } } if (!empty($u)) { /*刚开始这里用的是explode,实际操作发现不行,查手册才知道是因为explode是用一个字符串去拆分 另外一个字符串,分割字符是必填的; 而str_split才是真正的拆分字符串,直接把字符串进行分割,第二个参数是分割长度,默认是1;*/ $arr = str_split($str); foreach ($u as $key) { unset($arr[$key]); unsetPrev($key-1,$arr); } } return implode('', $arr); } # 这里用到了引用传值 function unsetPrev($k, &$arr){ if ($k >= 0) { if (isset($arr[$k])) { unset($arr[$k]); }else{ unsetPrev($k-1,$arr); } } return $arr; } # 方法二:这是经大佬点拨,运用了堆栈思想-->后进先出 function filterStr2($str,$filter){ if (is_string($str) && !empty($str)) { $arr = str_split($str); $newArr = array(); $filterArr = array(); foreach ($arr as $key => $value) { if($value == $filter){ array_pop($newArr); }else{ array_push($newArr,$value); } } return implode('', $newArr); } } $url = 'https://pengxb.com/'; echo $url.'<br />'; print_r(filterStr($url,'m')); echo '<br />'; print_r(filterStr2($url,'m'));
结果
https://pengxb.com/ https://pengxb.c/ https://pengxb.c/
得到的结果是一样的,只是同样的结果,这代码量明显不一样/(ㄒoㄒ)/~~
写完之后发现自己有三个不足:
一、explode用多了,泪奔中::>_<::...
二、引用传值还是不太熟啊,第一次用错了,在调用的时候,是不需要带&符号的,丢。。。
三、要好好了解了解堆栈思想了,嗯。。。
没有难的技术,当你弄清它的原理时,你会发现原来如此简单~ 欢迎加群【536501561】讨论