PHP:在除最后一个元素之外的每个元素之后显示逗号。使用“for”语句而不使用“内爆/爆炸”
Posted
技术标签:
【中文标题】PHP:在除最后一个元素之外的每个元素之后显示逗号。使用“for”语句而不使用“内爆/爆炸”【英文标题】:PHP: Display comma after each element except the last. Using 'for' statement and no 'implode/explode' 【发布时间】:2011-02-21 10:41:54 【问题描述】:我有这个简单的 for 循环来回显一个数组:
for ($i = 0; $i < count($director); $i++)
echo '<a href="person.php?id='.$director[$i]["id"].'">'.$director[$i]["name"].'</a>';
这里的问题是,当数组中有多个元素时,我会得到所有内容的回显,之间没有任何空格。我想用逗号分隔除最后一个之外的每个元素。
我无法使用implode
,所以我正在寻找其他解决方案
【问题讨论】:
Tom Haigh 的回答应该有效。或者只是从结果字符串中删除最后一个字符(但可能不是一种干净的方式;))。 @SilentGhost:你为什么要标记这个作业?如果由于语句 I can't use 'implode' :OP访问一个数组,所以他需要循环。implode
仅在您已经有一组要“内爆”的元素时才有效(当然可以事先生成 html 列表然后内爆,但这对我来说似乎没有必要)。
@Felix:因为不使用内爆的荒谬条件
@SilentGhost:看我之前的评论,我觉得你判断得太快了……
@felix:在这里使用implode
是合适的,我不明白为什么这个问题需要受到一些不合理的条件的限制。
【参考方案1】:
这应该可以。我认为最好调用一次count()
,而不是每次循环迭代。
$count = count($director);
for ($i = 0; $i < $count; $i++)
echo '<a href="person.php?id='.$director[$i]["id"].'">'.$director[$i]["name"].'</a>';
if ($i < ($count - 1))
echo ', ';
【讨论】:
每个人总是通过检查$i < ($count - 1);
来做到这一点;我是唯一一个将检查移到主回声上方并检查$i != 0
的人吗?
@Michael Mrozek:那不会还是给你一个尾随逗号吗?
不,您添加的是前导逗号而不是尾随,但它会跳过第一个逗号,因此您不会得到“, stuff, stuff”。 for(...) if($i != 0) echo ", "; echo "stuff";
【参考方案2】:
$number = count($director);
for ($i = 0; $i < $number; $i++)
echo '<a href="person.php?id='.$director[$i]["id"].'">'.$director[$i]["name"].'</a>';
if($i < $number - 1)
echo ', ';
糟糕,我没有看到 Tom Haigh 的回复,我们的回复几乎相同。
【讨论】:
【参考方案3】:这样的事情怎么样?您可能希望将“count($director)”的结果存储在循环外部的变量中,这样您就不必在每次运行循环时都浪费资源重新计算它。
for($i=0; $i<count($director);$i++)
echo '<a href="person.php?id='.$director[$i]["id"].'">'.$director[$i]["name"].'</a>';
if($i!=count($director)-1)echo ',';
【讨论】:
【参考方案4】:我的首选方法:
$links = [];
for ($i = 0; $i < count($director); $i++)
$links[] = '<a href="person.php?id='.$director[$i]["id"].'">' .
$director[$i]["name"] . '</a>';
echo implode(', ', $links);
或者
$output = "";
for ($i = 0; $i < count($director); $i++)
if ($output)
$output .= ", ";
$output .= '<a href="person.php?id='.$director[$i]["id"].'">' .
$director[$i]["name"].'</a>';
echo $output;
【讨论】:
我也倾向于使用这个! :-) 不错。【参考方案5】:如果我没记错 PHP 语法,这可能也会有所帮助:
$str = "";
for ($i = 0; $i < count($director); $i++)
$str .= '<a href="person.php?id='.$director[$i]["id"].'">'.$director[$i]["name"].'</a>, ';
$str = trim($str, ", ");
【讨论】:
你甚至可以rtrim()
而不是trim()
,所以你肯定只能捕捉尾随逗号。【参考方案6】:
好吧,foreach
包含 for
:-)
foreach ($director as $key => $person)
if ($key !== 0) echo ', ';
echo '<a href="person.php?id='.urlencode($person['id']).'">'.$person['name'].'</a>';
【讨论】:
【参考方案7】:更好的解决方案是完全避免循环。为了清楚起见,我忽略了建立链接。请注意,我不认为无法使用 implode 是一个条件。我相信这是一个简单的陈述,“我看不出如何使用 implode 来完成这项工作,所以我这样做了。”
$last_entry = array_pop($director);
if(count($director) > 0)
echo implode(", ", $director) . " and " . $last_entry;
else
echo $last_entry;
【讨论】:
【参考方案8】:for ( $i=0 ; $i < count($arr)-1 ; $i++ )
echo ( $arr[$i]."," );
echo ( $arr[count($arr)-1] );
【讨论】:
【参考方案9】:// RENAMED $director to $directors
$links = '';
foreach ($directors AS $director)
$links .= "<a href=\"person.php?id=director['id']\">$director['name']</a>";
if (true !== empty($links))
$links .= ', ';
echo $links;
【讨论】:
【参考方案10】:foreach ($strings as $string)
$superstring .= $string . ', ';
$echostring = substr_replace($superstring ,"",-2);
echo $echostring;
【讨论】:
【参考方案11】:这是我的 2 行解决方案
// Create your Array
$cities = Array("Rome", "Florence", "Venice");
// implode them
$list = trim(implode (", ", $cities)) ;
// remove last comma
$list = substr ( $list,0 ,strlen( $list ) );
//check result
die ($list);
【讨论】:
【参考方案12】:$count =1; for ($i = 0; $i 如果 ($count!=1) 回声','; echo ''.$director[$i]["name"].''; $计数++;
【讨论】:
以上是关于PHP:在除最后一个元素之外的每个元素之后显示逗号。使用“for”语句而不使用“内爆/爆炸”的主要内容,如果未能解决你的问题,请参考以下文章