douyin2962 2012-05-14 11:12
浏览 5
已采纳

压缩函数从字符串中删除双字母(PHP)

I need to take every double letter occurrence away from a word. (I.E. "attached" have to become: "aached".)

I wrote this function:

function strip_doubles($string, $positions) {
for ($i = 0; $i < strlen($string); $i++) {
    $stripped_word[] = $string[$i];
}   
foreach($positions['word'] as $position) {      
    unset($stripped_word[$position], $stripped_word[$position + 1]);
}
$returned_string= "";   
foreach($stripped_words $key => $value) {
    $returned_string.= $stripped_words[$key];
}
return $returned_string;
}

where $string is the word to be stripped and $positions is an array containing the positions of any first double letter.

It perfectly works but how would a real programmer write the same function... in a more condensed way? I have a feeling it could be possible to do the same thing without three loops and so much code.

  • 写回答

2条回答 默认 最新

  • 普通网友 2012-05-14 11:24
    关注

    Non-regex solution, tested:

    $string = 'attached';
    $stripped = '';
    for ($i=0,$l=strlen($string);$i<$l;$i++) {
        $matched = '';
        // if current char is the same as the next, skip it
        while (substr($string, $i, 1)==substr($string, $i+1, 1)) {
            $matched = substr($string, $i, 1);
            $i++;
        }
        // if current char is NOT the same as the matched char, append it
        if (substr($string, $i, 1) != $matched) {
            $stripped .= substr($string, $i, 1);
        }
    }
    echo $stripped;
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 WPF 大屏看板表格背景图片设置
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示