【问题标题】:str replace removing all commasstr 替换删除所有逗号
【发布时间】:2015-07-09 05:10:06
【问题描述】:

所以我在这里有一个非常简单的问题。

当我在逗号分隔列表上运行 str_replace 函数以删除前面带有逗号的值时,该函数会删除列表中的所有逗号。

我在这里做错了什么?

有问题的对象:

$tags = "16, 17, 18, 20, 21, 22"

$tag_id = "17"

代码:

if (strpos($tags, ', '.$tag_id))
{
 //remove this in this format
  $new_tags = str_replace(', '.$tag_id, "", $tags);
}
elseif (strpos($tags, $tag_id.', '))
{
  //remove this in this format
  $new_tags = str_replace($tag_id.', ', "", $tags);
}
else
{
  //just remove the number
  $new_tags = str_replace($tag_id, "", $tags);
}

【问题讨论】:

  • 这就是str_replace 的目的。替换字符串中要替换的所有实例。
  • 但 tag_id 是唯一的。或者这在这里真的不重要吗?
  • 你期望的输出也在这里发布

标签: php string str-replace codeigniter-3


【解决方案1】:

我认为你真正在寻找的是:

$tags = (...);
$tag_id = 17;
$tags_array = explode(',', $tags);
if(($idx = array_search($tag_id , $tags_array )) !== false) {
    unset($tags_array[$idx]);
}
$tags_cleaned = implode(', ', $tags_array);
//16, 18, 20, 21, 22

Functional example

【讨论】:

    【解决方案2】:

    在执行 str_replace 之前,您的 $tag_id 是否正确初始化?

    【讨论】:

      【解决方案3】:

      我认为,在数组中处理这个 csv 列表操作会更容易。使用爆炸和一些数组操作可以帮助您做到这一点。

      $list = array_map('trim', explode(',', $tags));
      $flippedList = array_flip($list);
      unset($flippedList[$tagId]);
      
      $newTags = join(',', array_flip($flippedList));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-06
        • 1970-01-01
        • 1970-01-01
        • 2022-01-12
        • 2012-12-03
        • 2020-05-18
        相关资源
        最近更新 更多