最佳实践:处理foreach中的第一个/最后一个项目

时间:2014-08-07 04:42:03

标签: php foreach

很多时候我遇到过像这样的情况

$str = '';
foreach($arr as $item)
{
    $str .= $item . ',';
}

结果类似$str = item1,item2,item3,。但我最后不想要,

现在有一些方法可以摆脱, E.g。

  • 使用substr()剪切,
  • 编写一个函数来检测最后一项并将循环体改为

    $str .= $item;  
    if(!last($item)) 
       $str .= ',';
    

    我认为这是好的可读性,但是如果它是最后一个,程序会检查每个项目,这显然只有一次。

  • 使用implode(',', $arr)但我们假设这是不可能的。想想一个更复杂的循环体

处理foreach循环中最后一个(或第一个)项目的最佳做法是什么?

4 个答案:

答案 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;

这不会在循环中检查或分配任何其他内容,但我认为这不是一个好的可读方式。