PHP:在除最后一个元素之外的每个元素之后显示逗号。使用'for'语句而不是'implode / explode'

时间:2010-05-19 15:09:07

标签: php arrays loops

我有这个简单的for循环来回显一个数组:

for ($i = 0; $i < count($director); $i++) {
   echo '<a href="person.php?id='.$director[$i]["id"].'">'.$director[$i]["name"].'</a>';
}

这里的问题是,当数组中有多个元素时,我会在没有任何空格的情况下回显所有内容。我想用逗号分隔每个元素,除了最后一个。

我无法使用implode所以我正在寻找其他解决方案

12 个答案:

答案 0 :(得分:13)

这应该有效。我认为最好只调用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 ', ';
   }
}

答案 1 :(得分:4)

如果我正确记住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, ", ");

答案 2 :(得分:3)

更好的解决方案是完全避免循环。为了清楚起见,我忽略了构建链接。请注意,我不相信无法使用内爆是一个条件。我相信这是一个简单的陈述,“我无法看到如何使用内爆使这项工作,所以我这样做了。”

$last_entry = array_pop($director);
if(count($director) > 0) {
    echo implode(", ", $director) . " and " . $last_entry;
} else {
    echo $last_entry;
}

答案 3 :(得分:2)

我的首选方法:

$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;

答案 4 :(得分:1)

for ( $i=0 ; $i < count($arr)-1 ; $i++ )
{
    echo ( $arr[$i]."," );
}
echo ( $arr[count($arr)-1] );

答案 5 :(得分:0)

$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的回复,我们几乎一样来了。

答案 6 :(得分:0)

这样的事情怎么样?您可能希望将“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 ',';}
}

答案 7 :(得分:0)

好吧,foreach包含for: - )

foreach ($director as $key => $person) {
    if ($key !== 0) echo ', ';
    echo '<a href="person.php?id='.urlencode($person['id']).'">'.$person['name'].'</a>';
}

答案 8 :(得分:0)

// 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;

答案 9 :(得分:0)

foreach ($strings as $string){
    $superstring .= $string . ', ';
}
$echostring = substr_replace($superstring ,"",-2);
echo $echostring;

答案 10 :(得分:0)

这是我的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);

答案 11 :(得分:-1)

$ count = 1;
for($ i = 0; $ i&lt; count($ director); $ i ++){
if($ count!= 1){
           回声&#39; ,&#39;;
   }
   echo&#39;。$ director [$ i] [&#34; name&#34;]。&#39;&#39 ;;
$计数++;
}