我有一个问答论坛。用户可以浏览对问题的回答,并根据需要进行宣传。下面的代码输出已提升给定问题的不同用户-这些用户位于从行$ promoters = Promotion :: find_all_promotions_for_response($ response-> response_id)返回的数组'$ promoters'中; 。然后,foreach循环遍历每个循环,并通过css类"启动子列表"输出它们的样式。问题是.....如果我有一个启动子,我只想输出他们的名字(这个没问题)。但是,如果我有很多我想在每个名称之间使用逗号,然后在foreach循环中的姓氏后面再添加一个逗号。直截了当的问题,但我未能实现这一目标。...我试图在elseif条件下添加count($ promoters)行,以便如果数组$ promoters具有多个值,则它将输出用户全名,然后输出逗号,但是姓氏后面当然也带有逗号,这是错误的。您如何确定foreach循环中的最后一次迭代,并要求它对此做一些不同的事情.....
非常感谢你们...
$promoters = Promotion::find_all_promotions_for_response($response->response_id);
if(!empty($promoters)){
echo"Promoted by ";
foreach($promoters as $promoter){
echo"" . User::full_name($promoter->user_id) .", ";
}
} else {
echo"";
};
?>
通常,这是通过将所有项目放入数组并使用join(,, $items)来完成的。
@deceze通常,我会同意,但是在这种情况下,逗号位于SPAN标记内。 即使您使用join(, , $items),最后一项也不会带有结束SPAN标记。
使用数组,并内爆+添加第一个开始跨度和最后一个关闭跨度。
@Typoheads ID认为跨度可能不应该包含逗号。 由于该类称为"列表",因此将每个单独的项目包装在一个单独的跨度中似乎很奇怪。
是的,我同意这一点。 我在您的答案中添加了您的建议。
$promoters = Promotion::find_all_promotions_for_response($response->response_id);
if(!empty($promoters)){
echo"Promoted by ";
foreach($promoters as $idx=>$promoter){
echo"" . User::full_name($promoter->user_id);
if($idx < count($promoters) - 1) {
echo",";
}
echo"";
}
} else {
echo"";
}
?>
更新:
这是@deceze建议的使用implode的另一种方式:
$promoters = Promotion::find_all_promotions_for_response($response->response_id);
if(!empty($promoters)){
echo"Promoted by ";
$htmlParts = array();
foreach($promoters as $idx=>$promoter){
$htmlParts[] ="" . User::full_name($promoter->user_id);
}
echo implode(', ', $htmlParts) . '';
} else {
echo"";
}
?>
它工作得很漂亮..将在6分钟内确认.....! 欢呼错字..
还有更多很棒的建议。...谢谢大家。 我认为上述方法非常实用。 Stackoverflow非常有用。