比方说,我有这样的:如何轻松地从数组中删除最后一个逗号?
$array = array("john" => "doe", "foe" => "bar", "oh" => "yeah");
foreach($array as $i=>$k)
{
echo $i.'-'.$k.',';
}
呼应"john-doe,foe-bar,oh-yeah,"
如何甩掉最后一个逗号的?
比方说,我有这样的:如何轻松地从数组中删除最后一个逗号?
$array = array("john" => "doe", "foe" => "bar", "oh" => "yeah");
foreach($array as $i=>$k)
{
echo $i.'-'.$k.',';
}
呼应"john-doe,foe-bar,oh-yeah,"
如何甩掉最后一个逗号的?
或者您可以使用rtrim
功能:
$result = '';
foreach($array as $i=>$k) {
$result .= $i.'-'.$k.',';
}
$result = rtrim($result,',');
echo $result;
一种方法是使用substr
$array = array("john" => "doe", "foe" => "bar", "oh" => "yeah");
$output = "";
foreach($array as $i=>$k)
{
$output .= $i.'-'.$k.',';
}
$output = substr($output, 0, -1);
echo $output;
另一种方法是使用implode
$array = array("john" => "doe", "foe" => "bar", "oh" => "yeah");
$output = array();
foreach($array as $i=>$k)
{
$output[] = $i.'-'.$k;
}
echo implode(',', $output);
感谢你的帮助 – Bastien 2010-09-24 05:11:01
后试试这个代码foreach条件然后echo $ result1
$result1=substr($i, 0, -1);
我不喜欢这种使用substr的想法,因为它是糟糕的编程风格。这个想法是连接所有元素,并通过特殊的“分离”短语将它们分开。为此调用子字符串的想法就像使用激光来拍摄鸟类。
在我目前正在处理的项目中,我们试图摆脱编码中的不良习惯。这个样本被认为是其中之一。我们强迫程序员这样写这样的代码:
$first = true;
$result = "";
foreach ($array as $i => $k) {
if (!$first) $result .= ",";
$first = false;
$result .= $i.'-'.$k;
}
echo $result;
这段代码的目的比使用substr的更清晰。或者你可以简单地使用implode函数(我们的项目是用Java编写的,所以我们必须设计自己的函数来连接字符串)。只有当你有真正需要时才应该使用substr函数。这应该避免,因为这是一种糟糕的编程风格。
这是一种糟糕的编程风格吗?你介意为我们所有人介绍一下吗?据我所知,这并不妨碍表演。我可以理解清晰度的一部分,但同时也不难读出substr做什么来解决这个问题。谢谢! – 2010-09-24 13:25:49
恕我直言,每个工具都应该在程序中适当地使用,并且它不是用于字符串连接的substr目的,而是针对其他问题而设计的。此外,与substr的这个代码看起来很清楚,只有它在一个地方。如果有这样的许多碎片,代码就变成不可读的。因此,在我们的项目中,我们改为正常连接,并为此做了一个特殊功能。现在处理字符串的项目的部分更具可读性。 – 2010-09-25 13:51:31
非常感谢你为这个伟大而专业的解决方案。 (y) – 2016-04-10 13:47:34
我一直用这个方法:
$result = '';
foreach($array as $i=>$k) {
if(strlen($result) > 0) {
$result .= ","
}
$result .= $i.'-'.$k;
}
echo $result;
对此使用strlen的错误主意。请参阅Joel Spolsky的“返回基础知识”文章,以了解为什么。只需使用一个布尔标志来执行这样的检查,因为在最坏的情况下(数组有N个元素 - 单个字符),您将以O(N^2)复杂度结束。 – 2010-09-24 06:15:41
一般来说,不要使用字符串函数来达到某些效果,这可以通过简单的编程技巧轻松实现(对于使用substr来消除最后一个逗号也是如此 - 最好不要生成最后一个comman)。 – 2010-09-24 06:17:46
我不喜欢所有以前的食谱。
Php不是C,并有更高级别的方法来处理这个特定的问题。
我将开始从那里你有一个这样的数组点:
$array = array('john-doe', 'foe-bar', 'oh-yeah');
你可以建立从使用循环或array_map()功能的初始一个这样的数组。请注意,我正在使用单引号字符串。如果您没有需要替换的变量名称,这是一个微型优化。
现在你需要生成此数组一个CSV字符串,这是可以做到这样的:
echo implode(',', $array);
这种方法的好处是我们可以更容易地更改分隔符。此外,您可以将字符串分解为稍后类似于此的数组。对于更清洁的方法,不确定性能缺陷 – thethanghn 2010-09-24 06:36:58
+1。 – NikiC 2010-09-24 06:43:51
我更喜欢这个。如果你不需要,不要循环。 – Powertieke 2010-09-24 06:44:02
这会做:
rtrim ($string, ',')
假设数组的索引,这是为我工作。我循环$ i并测试$ $对$键。当密钥结束时,逗号不会打印。请注意,IF有两个值可确保第一个值在开始时没有逗号。
foreach($array as $key => $value)
{
$w = $key;
//echo "<br>w: ".$w."<br>";// test text
//echo "x: ".$x."<br>";// test text
if($w == $x && $w != 0)
{
echo ", ";
}
echo $value;
$x++;
}
看到这个例子中,你可以很容易地理解
$name = ["sumon","karim","akash"];
foreach($name as $key =>$value){
echo $value;
if($key<count($name){
echo ",";
}
}
是啊,忘了微调。 +1 – 2010-09-24 05:06:59
我更喜欢这个,谢谢。 – Bastien 2010-09-24 05:16:09
太糟糕了php不支持'unset($ result [strlen($ result)-1])''。这将是非常好的... – NikiC 2010-09-24 06:44:38