很多时候我遇到过像这样的情况
$str = '';
foreach($arr as $item)
{
$str .= $item . ',';
}
结果类似$str = item1,item2,item3,
。但我最后不想要,
。
现在有一些方法可以摆脱,
E.g。
substr()
剪切,
。编写一个函数来检测最后一项并将循环体改为
$str .= $item;
if(!last($item))
$str .= ',';
我认为这是好的可读性,但是如果它是最后一个,程序会检查每个项目,这显然只有一次。
implode(',', $arr)
(但我们假设这是不可能的。想想一个更复杂的循环体)处理foreach循环中最后一个(或第一个)项目的最佳做法是什么?
答案 0 :(得分:6)
在没有类似join
的方法的语言中,这是我已经使用过(并且已经使用过)一段时间了。
result = ""
delim = ""
foreach(string in array)
result += delim + string
delim = ","
(适用于您最喜欢的语言)
在使用PHP的情况下,它看起来像
$str = "";
$delim = "";
foreach($arr as $item) {
$str .= $delim + $item;
$delim = ",";
}
答案 1 :(得分:0)
按照此示例,它可以解决您的障碍。
$arr = array(1,2,3,4,5,6,7);
$copy = $arr;
foreach ($arr as $val) {
echo $val;
if (next($copy )) {
echo ','; // Add comma for all elements instead of last
}
}
答案 2 :(得分:0)
您还可以使用rtrim
删除上一个不需要的字符
$str = rtrim($str, ',');
答案 3 :(得分:0)
这也可能是一种方式:
$last = end($arr); // returns the last item and sets the internal pointer to the end
unset($arr[key($arr)]) // deletes the last item from the array
$str = '';
foreach($arr as $item)
{
$str .= $item . ',';
}
$str .= $last;
这不会在循环中检查或分配任何其他内容,但我认为这不是一个好的可读方式。