PHP循环,更改最后一项?

时间:2010-12-10 22:38:30

标签: php loops css-selectors

这实际上可能是一个css问题,但我希望不是因为我希望在IE中使用它。

我有以下循环:

<?php 
  if ($category)
{
     foreach($category as $item)
         {
               echo $item['name'];
               echo ", ";
         }
} ?>

哪个应输出

项目,项目,项目,项目,

唯一的事情是......我想在最后一项之后没有逗号。在循环中有没有办法做到这一点?

8 个答案:

答案 0 :(得分:7)

为了保持你的代码是这样的,你可以添加一个计数器,然后跳过最后一个。

<?php 
if ($category) {
     $counter = 0;
     foreach($category as $item)
         {
               $counter++;
               echo $item['name'];
               if ($counter < count($category)) {
                   echo ", ";
               }
         }
}
?>

或者你可以做得更多,更快,更快:

<?php echo implode(", ", array_map(create_function('$item', 'return $item["name"];'), $category)); ?>

答案 1 :(得分:4)

不要立即回声,而是将输出保存到可以修剪的变量中。

<?php 
if ($category) {
    $output = '';
    foreach($category as $item) {
           $output .= $item['name'];
           $output .= ", ";
    }
    echo rtrim($output, ', ');
} 
?>

答案 2 :(得分:2)

implode解决方案是最简单的,但是你要求循环。此方法避免在循环中添加额外的条件,因此应该更有效。基本上,不是为最后一项做不同的事情,而是为第一项做不同的事情。

$myArray = array(); //Fill with whatever
$result = $myArray[0];
for ($idx = 1; $idx < count($myArray); $idx += 1)
{
    $result .= ', ' . $myArray[$idx];
}

编辑:在意识到你想要$ item ['name']而不是$ item:

之后
$myArray = array(); //Fill with whatever
$result = $myArray[0]['name'];
for ($idx = 1; $idx < count($myArray); $idx += 1)
{
    $result .= ', ' . $myArray[$idx]['name'];
}

答案 3 :(得分:1)

foreach一样可爱,......

<?php
if ($category) {
     $count = count($category) - 1;
     for ($i = 0; $i <= $count; $i++) {
         echo $category[$i]['name'];
         if ($i < $count)
             echo ', ';
     }
}
?>

... for有时是必要的。

答案 4 :(得分:1)

假设$category是一个数组,您可以使用implode来获得所需内容:

编辑错过$ categories ['name']部分,这应该有效:

<?php implode(", ", array_keys($category, 'name')); ?>

答案 5 :(得分:1)

“最后一个逗号”问题的标准解决方案是将项目放入数组然后内爆:

 $temp = array();
 foreach($category as $item)
    $temp[] =  $item['name'];
 echo implode(', ', $temp);

如果您希望这更通用,您还可以编写一个从每个子阵列中挑选(“摘取”)特定字段的函数:

  function array_pluck($ary, $key) {
     $r = array();
     foreach($ary as $item)
         $r[] = $item[$key];
     return $r;
  }

然后只是

  echo implode(', ', array_pluck($category, 'name'));

答案 6 :(得分:0)

另一种选择:

<?php 
$out = "";

foreach ($category as $item)
    {
    $out .= $item['name']. ", ";
    }

$out = preg_replace("/(.*), $/", "$1", $out);
echo $out;
?>

答案 7 :(得分:0)

或者您可以检查最后一个键:

end($category);
$lastkey = key($category);
foreach ( $category AS $key => $item ) {
  echo $item['name'];
  if ( $lastkey != $key ) {
    echo ', ';
  }
}