PHP: запятая Дисплея после каждого элемента кроме последнего. Используя 'для' оператора и не 'интегрируются/взрывают'

У меня есть это простое, чтобы цикл повторил массив:

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

Проблема здесь состоит в том, что, когда больше чем один элемент находится в массиве затем, я повторил все без любого пространства между. Я хочу разделить каждый элемент с запятой кроме последней.

Я не могу использовать implode таким образом, я ищу другое решение

8
задан Bill the Lizard 18 September 2012 в 14:05
поделиться

6 ответов

Это должно сработать. Я думаю, что лучше вызывать 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 ', ';
   }
}
13
ответ дан 5 December 2019 в 07:34
поделиться

Мой предпочтительный метод:

$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;
2
ответ дан 5 December 2019 в 07:34
поделиться
$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 ', ';
    }
}

Упс, я не видел ответ Тома Хейга, мы пришли практически с тем же.

0
ответ дан 5 December 2019 в 07:34
поделиться

Как насчет чего-то подобного? Возможно, вы захотите сохранить результат "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 ',';}
}
0
ответ дан 5 December 2019 в 07:34
поделиться

Ну, foreach содержит для : -)

foreach ($director as $key => $person) {
    if ($key !== 0) echo ', ';
    echo '<a href="person.php?id='.urlencode($person['id']).'">'.$person['name'].'</a>';
}
0
ответ дан 5 December 2019 в 07:34
поделиться

Если я правильно помню синтаксис 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, ", ");
4
ответ дан 5 December 2019 в 07:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: