如何在爆炸和更换过程中删除逗号空格?

时间:2011-02-14 00:00:16

标签: php csv explode string

$data = "google,facebook,youtube,twitter,bing";

$exp = explode(",",$data);

$rep = str_replace("facebook",$exp);
$final = implode(",",$rep);

echo $final

output// google,,youtube,twitter,bing

如何用逗号删除此空格?

6 个答案:

答案 0 :(得分:4)

以下是您的代码应该是什么样的:

$data = "google,facebook,youtube,twitter,bing";
$exp = explode(",",$data);

foreach($exp as $key => $item)
{
   if(trim($item) == "facebook")
   {
       unset($exp[$key]); //Remove from teh array.
   }
}

$final = implode(",",$rep);
echo $final;

或只要你在后来没有空格就可以去

$data = str_replace(",facebook,",",",$data);

<击>

对于使用str_replace的许多并发症,只需使用loopy方法。

答案 1 :(得分:3)

$data = "google,facebook,youtube,twitter,bing";

$exp = explode(',', $data);
$index = array_search('facebook', $exp);
if ($index !== false){
    unset($exp[$index]);
}

$final = implode(',', $exp);

http://php.net/array-search

答案 2 :(得分:2)

您可以使用array_filter($data)删除数组中的空元素:

$data = str_replace("facebook", "", "google,facebook,youtube,twitter,bing");

$exp = array_filter(explode(",",$data));

$final = implode(",",$rep);

echo $final;

http://php.net/manual/en/function.array-filter.php

“如果没有提供回调,则输入的所有条目等于FALSE(参见转换为布尔值)将被删除。”

这就是你要找的东西吗?

答案 3 :(得分:1)

有很多方法可以做到这一点但也许最简单的只是:

$data = str_replace(',,', ',', $data);

答案 4 :(得分:0)

$data = "google,facebook,youtube,twitter,bing";

$final = preg_replace("/(^facebook,?|,facebook,|,facebook$)/", "", $data);

可替换地:

$final = implode(',', preg_grep("/^facebook$/", explode(',', $data), PREG_GREP_INVERT));

请参阅preg_grep()

答案 5 :(得分:0)

罗伯特皮特的答案是唯一一个困扰循环并且比必要更复杂的答案。 Jonah's和Colin O&#;;戴尔的方法很有趣但也比必要的重。

Orbling与他的preg_replace方法非常接近,它需要太多逗号,也没有说明针是唯一值的可能性。

str_replacepreg_replace都有明显的优势,即不会费心explodeimplode。这需要是此页面上答案的主要分隔符。将字符串转换为数组并返回字符串(更不用说额外处理)的方法效率低于_replace方法。

我还会注意到,在他们的array_diff / explode方法中没有人提到implode所以我会将其包含在我的方法列表中,即使它依赖于在explodeimplode上。这纯粹是出于演示的目的。

如果针是另一个值的子字符串,则所有str_replace方法都可能不值得信任。由于OP的样本输入在这方面没有提出冲突,我已经建立了str_replace方法。

我的单线preg_replace方法很瘦而且坚固。

echo preg_replace("/,facebook\b|\bfacebook,|\bfacebook\b/","",$data);

通过使用单词边界(\b),我的正则表达式模式可以防止针存在于另一个值中。 See通过使用前导逗号检查针,然后使用尾随逗号检查,然后没有逗号;如果字符串中唯一的值是针,则模式仍然保持。最后,如果csv字符串中没有针,则没有错误。这是SO读者应该实现的答案。

如果要动态生成针,可以通过两种方式声明模式:

$needle="facebook";

echo preg_replace("/,$needle\b|\b$needle,|\b$needle\b/","",$data);
// OR
echo preg_replace("/,".$needle."\b|\b".$needle.",|\b".$needle."\b/","",$data);

Demo

我的第二名产品使用str_replace

$args=[["facebook",",,"],["",","]];
echo trim(str_replace($args[0],$args[1],$data),",");

它替换facebook然后用一个逗号替换任何双逗号,然后从结果字符串中删除任何前导或尾随逗号。

排在第三位,explode - &gt; array_diff - &gt; implode作为单行:

echo implode(',',array_diff(explode(',',$data),["facebook"]));

这是一个紧张的单行,但仍然需要麻烦爆炸,过滤和内爆。

以下是my testing ground我将所有三种方法都放在了步骤中。