我试图在这里分解逗号并显示以下类型的单词:
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_split
、array_filter
和implode
:
<?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将为空。