删除尾随逗号 - (在问这个之前我做了研究,相信我。)

Posted

技术标签:

【中文标题】删除尾随逗号 - (在问这个之前我做了研究,相信我。)【英文标题】:Delete Trailing Comma - (Did my research before asking this, trust me.) 【发布时间】:2013-09-11 16:50:41 【问题描述】:

好吧,在你说什么之前,我已经做了一个小时的研究,没有任何技术在起作用......继续这个问题:

我正在使用一个多维数组并尝试在一个数组中回显一个特定品牌的所有汽车模型。我有以下代码:

<?php
$cars = array( 
              "Dodge"  => array("Avenger","Challenger","Charger","Dart"),
              "Toyota" => array("Highlander","Tundra","Corolla"),
              "Nissan" => array("Sentra","Altima","Maxima")
        );

echo "Make: Toyota"; echo "<br><br>";

foreach($cars['Toyota'] as $x)


$cars['Toyota'] = rtrim($x, ',');
echo "$x, ";


?>

显然,我最近的一次拍摄是使用 rtrim 功能,但这对我不起作用。还尝试了内爆功能,但没有成功。我可以在这里帮忙吗?非常感谢您的时间!谢谢。

【问题讨论】:

echo implode(',', $cars['Toyota']); 怎么样? 我有点困惑。您是否在抱怨已回显的内容中的结尾逗号?如果是这种情况,那是因为您明确地执行了 `echo "$x, " 总是会给出一个逗号。 差不多了!但是,它返回为“Make: Toyota Highlander,Tundra,CorollaHighlander,Tundra,CorollaHighlander,Tundra,Corolla”所以它返回时没有尾随逗号,但连续打印 3 次......可能是因为其中有三个值特定的数组......所以它仍然是一个问题。 贾斯汀伍德,这是真的。但我希望项目用逗号分隔。 您没有告诉我们应该如何格式化输出。我只是给了你一个想法,你如何在不循环和最后一个元素有逗号的情况下做到这一点。此外,您不应在循环中使用该内爆函数。你不需要循环。 【参考方案1】:

您的问题是您自己将尾随逗号放在那里。试试这样的:

<?php
$cars = array( 
          "Dodge"  => array("Avenger","Challenger","Charger","Dart"),
          "Toyota" => array("Highlander","Tundra","Corolla"),
          "Nissan" => array("Sentra","Altima","Maxima")
    );

echo "Make: Toyota"; 
echo "<br><br>";

$first = TRUE;
$carString = '';
foreach($cars['Toyota'] as $x)
    if ($first)
        $carString .= $x;
        $first = FALSE;
    else
        $carString .= ", $x";
    

echo $carString;
?>

如果你想要一个更简单的循环,没有控制结构(我觉得演示循环中真正发生的事情很有用),那么你可以在循环后使用rtrim,就像这样:

<?php
$cars = array( 
          "Dodge"  => array("Avenger","Challenger","Charger","Dart"),
          "Toyota" => array("Highlander","Tundra","Corolla"),
          "Nissan" => array("Sentra","Altima","Maxima")
    );

echo "Make: Toyota"; 
echo "<br><br>";

$carString = '';
foreach($cars['Toyota'] as $car) 
   $carString .= $car.',';

echo rtrim($carString, ',');
?>

如果除了构建字符串之外你不需要循环任何东西,你可以只用implode 数组来打印它:

<?php
$cars = array( 
          "Dodge"  => array("Avenger","Challenger","Charger","Dart"),
          "Toyota" => array("Highlander","Tundra","Corolla"),
          "Nissan" => array("Sentra","Altima","Maxima")
    );

echo "Make: Toyota"; 
echo "<br><br>";
echo implode(', ', $cars['Toyota']);
?>

【讨论】:

尽管我给出了自己的答案,但我还是赞成这个答案,因为echo implode... 避免了循环,而且代码更简洁。 我开始将其作为编辑,但我会留给你和 OP,但你可能想要implode(', ', $cars['Toyota']); 我更愿意将其保留为循环。在这种情况下可能不需要......但我正在尝试学习循环,以防我以后需要使用一个。所以我会尝试你的第一个答案,但它似乎有很多用于尾随逗号修复的代码。 成功了,布巴!你的回答是 rtrim 函数有效,我相信这将是我更喜欢的,虽然我还在学习......我将来会使用 foreach 循环,所以我可能在这里不需要它,但我以后可能会对?非常感谢你,我现在不能投票给你,因为我还没有 15 个代表......真的很抱歉 :( 但是你问了这个问题,你可以把它标记为选择的答案,不是吗?【参考方案2】:

我认为这是你真正想要的:

foreach($cars['Toyota'] as $key=>$x)

echo $x;
if($cars['Toyota'][$key+1])echo ', ';

【讨论】:

这几乎就是我想要的。但是,它仍然与尾随的逗号相呼应:(我完全使用了你的代码。我正在用 phpfiddle.org btw 进行测试.... 我在writecodeonline.com/php 测试了我的代码,它运行良好。但是,我建议改为@Bubba 的解决方案。您将数组内爆并回显它。 我现在会在那里测试它。我也喜欢 Bubba 的解决方案,但我想将其作为一个循环用于学习目的。那它还能用吗? 非常感谢 TecBrat 的帮助。 Bubba 的 rtrim 函数解决方案终于对我有用。您的可能也可以正常工作,只是在我的情况下无法正确完成。谢谢你帮助我!!

以上是关于删除尾随逗号 - (在问这个之前我做了研究,相信我。)的主要内容,如果未能解决你的问题,请参考以下文章

x, = ... - 这个尾随逗号是逗号运算符吗?

如何去除手机上按钮的蓝色高亮?

带逗号的 Oracle 格式数字删除尾随零小数

以逗号分隔的字符串查找目录列表,不带尾随逗号

删除尾随逗号

为啥前导/尾随空间显示为 -16?