【问题标题】:Remove an item from a comma-separated string [duplicate]从逗号分隔的字符串中删除项目[重复]
【发布时间】:2012-01-30 09:18:13
【问题描述】:

假设我有一个字符串:

cat,mouse,dog,horse

是否有正则表达式或函数可以按如下方式工作?

    1)"cat"       return string ->"mouse,dog,horse"
    2)"mouse"     return string ->"cat,dog,horse"
    3)"dog"       return string ->"cat,mouse,horse"
    4)"horse"     return string ->"cat,mouse,dog"

我需要从字符串中删除选中的项,并返回字符串的剩余部分。

【问题讨论】:

    标签: php replace csv


    【解决方案1】:

    您的意思是删除某个元素的函数?试试这个:

    function removeFromString($str, $item) {
        $parts = explode(',', $str);
    
        while(($i = array_search($item, $parts)) !== false) {
            unset($parts[$i]);
        }
    
        return implode(',', $parts);
    }
    

    Demo

    【讨论】:

      【解决方案2】:

      就像分解字符串 (str_getcsv) 然后删除搜索词一样简单。如果你有一个数组,那么array_diff 让它变得非常简单:

       return array_diff(str_getcsv($list), array($search));
      

      【讨论】:

      • 这将是我的首选解决方案,但请注意 str_getcsv 仅适用于 PHP5.3+。如果OP使用的是共享主机,还有很多主机公司还在运行PHP5.2。
      • @liquorvicar:这只是一个小障碍。我自己也遭受 5.2 主机的困扰,但 PHP_Compatupgradephp 几乎可以解决这个问题。一些用户态仿真甚至超越了本机功能,因此有时在 5.2 服务器上运行 5.3 功能是有益的;)
      【解决方案3】:

      Working demo.

      这会将两个字符串输入转换为数组,使用explode() 作为列表。然后您只需执行array_diff() 即可输出第二个数组中的内容,而不是第一个数组中的内容。最后我们implode()把所有东西都恢复成CSV格式了。

      $input = 'cat';
      $list = 'cat,mouse,dog,horse';
      
      $array1 = Array($input);
      $array2 = explode(',', $list);
      $array3 = array_diff($array2, $array1);
      
      $output = implode(',', $array3);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-08-27
        • 1970-01-01
        • 2023-03-10
        • 2016-12-23
        • 2016-05-21
        • 2021-12-21
        • 1970-01-01
        相关资源
        最近更新 更多