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

у меня есть этот простой цикл for для Эха массива:

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

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

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

12 ответов


Это должно работать. Лучше я думаю позвонить 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 ', ';
   }
}

Если я правильно помню синтаксис 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, ", ");

лучшим решением является полное исключение цикла. Я проигнорировал создание ссылок ради ясности. Обратите внимание, что я не верю, что неспособность использовать implode является условием. Я считаю, что это простое утверждение: "Я не вижу, как сделать эту работу с помощью implode, поэтому я сделал это так."

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

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

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

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

$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 ', ';
    }
}

Как насчет чего-то вроде этого? Вы можете сохранить результат "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 ',';}
}

Ну foreach содержит for : -)

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

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

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

вот мое решение для 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);

$count =1;
for ($i = 0; $i если ($count!=1) {
echo',';
}
эхо.'' $ директор[$i] ["имя"].";
$счетчик++;
}