PHP分解-删除最后一个逗号


PHP Explode - Remove the last comma

我试图在这里分解逗号并显示以下类型的单词:

Words included: Word1, Word2, Word3, Word4, Word5 (without the comma at the end)

我写了一个代码:

<?php
$str = "Word1, Word2, Word3, Word4, Word5,";
$array = explode(',', $str);
foreach($array as $var)
{
    echo $var.", ";
}
?>

但它显示:

Words included: Word1, Word2, Word3, Word4, Word5, (with comma at the end)

如何删除最后一个逗号?

如果您只想删除最后一个逗号,请使用substr

$str = substr($str, 0, -1);

我更喜欢在PHP中使用内爆,它将与for循环相同,并且能够定义分隔符。

所以你的代码应该是

$str = "Word1, Word2, Word3, Word4, Word5,";
$array = explode(',', $str);
//Implode function, you can also set it to return the value to a variable
print implode(", ",$array);

每当你遍历一个循环并将,添加到字符串的末尾时,最后一个字符串的末尾就会有一个,。要解决这个问题,请在数组中使用implode,而不是在字符串中添加内容。

示例:

<?php
$data = 'foo,bar,oof,rab';
$split = explode(',', $data);
$buffer = '';
foreach ($split as $value) {
    $buffer .= $value . ', ';
}
var_dump( $buffer ); // string(20) "foo, bar, oof, rab, "
var_dump( implode(', ', $split)); // string(18) "foo, bar, oof, rab"

演示

在您的示例中,要删除空值,您可以简单地使用preg_splitarray_filterimplode:

<?php
$data = 'Word1, Word2, Word3, Word4, Word5,';
// Split on comma and remove empty values
$words = array_filter(preg_split('/'s*,'s*/', $data));
// string(33) "Word1, Word2, Word3, Word4, Word5"
var_dump( implode(', ', $words) ); 
// string(41) "Word1 OR Word2 OR Word3 OR Word4 OR Word5"
var_dump( implode(' OR ', $words) ); 

演示

注意,我们可以用我们选择的任何东西把它粘在一起。

为什么使用preg_split而不是explode?这很简单。正则表达式为's*,'s*preg_split会将字符串拆分为"任意数量的空格('s*)",然后是"逗号(,)",最后是"任意数量空间('s*)"。这意味着我们可以加入例如.,并获得Word1.Word2.Word3.Word4.Word5而不是Word1. Word2. Word3. Word4. Word5(因此本质上我们拥有完全控制权)。

您的问题是字符串中的最后一个,

$str = "Word1, Word2, Word3, Word4, Word5,";
//---------------------------------------^

这会导致爆炸创建一个空数组,并且您的前臂会遍历每个位置的数组,无论其是否已填充。此外,你总是在字符串的末尾添加一个,,所以这实际上不是你想要的:)

这里有一些适合的答案。但是您也可以检查空数组。。

<?php
    $str = "Word1, Word2, Word3, Word4, Word5,";
    $array = explode(',', $str);
    foreach($array as $var)
    {
        if(empty($output)){
            $output = $var;
        }else{
            if(!empty($var))
                $output .= "," . $var;
        }
    }
    echo $output;
?>

您也可以使用rtrim():删除最后一个逗号

$array = explode(',', rtrim($str, ','));

但是,由于您在循环中输出逗号,因此可以在循环后使用rtrim()删除最后一个逗号:

$output = '';
$str = "Word1, Word2, Word3, Word4, Word5,";
$array = explode(',', $str);
foreach($array as $var) {
  $output .= $var . ',';
}
print rtrim($output, ',');
  

尝试:

$str = trim($str,",");

$array = explode(',', $str); 之前

逗号就在那里,因为你要告诉PHP输出它。你可以像其他人建议的那样使用implode(),也可以制作一个更复杂的循环:将逗号的输出方式更改为之前并动态更新,或者以某种方式检测何时处于循环末尾并抑制其输出。

这个版本做第一个选项:

$comma = ''; // initially blank
foreach($array as $var) {
    echo $comma, $var;
    $comma = ', ';
}

换句话说,在第二次和随后的循环迭代中,仅在单词前输出逗号BEFORE。第一次循环时,输出时$comma将为空。