Получить все имена и положить запятая, чтобы отделить друг от друга


Когда я получаю имена и добавляю в переменную, я не могу отделяет их от запятая обычно.

  • должен быть запятая и точка в конце
  • я не могу поместить каждое имя в разрыв строки с помощью

- Это трудно объяснить, но будет, например:

while ($listintegrantes = mysqli_fetch_array($query1)) {
        $integrantes = "$integrantes" . $listintegrantes['nome'] . ",";
}

то есть, это будет отображаться так:

Джон, Старший, john2,

Но я хочу стоять:

Джон, джейд успевает освободить синдел, и john2.

Как это можно сделать?

-РЕШЕНИЕ

Следует разрешение проблемы написал выше, все разрешения являются правильными, приспособился к моей проблеме, чтобы мне верните мой правильная цель.

        $query1 = mysqli_query($conexao, $sql1);
        $integrantes = "";
        $i = mysqli_num_rows($query1);
        $x = 1;
        while ($listintegrantes = mysqli_fetch_array($query1)) {
            $integrantes = $integrantes . $listintegrantes['nome'];
            if ($x < $i - 1) {//antes do penultimo
                $integrantes = $integrantes . ", ";
            }elseif($x == $i-1){//penultimo
                $integrantes = $integrantes . " e ";
            }elseif($x == $i){//ultimo
                $integrantes = $integrantes . ".";
            }
            $x++;
        }

ниже отзывы выше алгоритм: Старший, Джон, Serana и Smigol.

, Если существует только одна запись неотъемлемой: Serana.

 13
php
Author: Murilo Man, 2015-04-27

5 answers

Вы Можете сделать так:

$sinal = ", ";
$size = mysqli_num_rows($query1);
$i = 1;
while ($listintegrantes = mysqli_fetch_array($query1)) 
{
    if($i == $size-1) 
        $sinal = " e ";
    elseif($i == $size) 
        $sinal = ".";

    $integrantes .= $listintegrantes['nome'] . $sinal;
    $i++;
}
 10
Author: Jorge B., 2015-04-27 15:44:31

Иначе было бы simpelsmente удаляя последний элемент массива, использовать implode, чтобы поставить virgulas если имя достаточно для разделения, а затем установите на место последнего элемента обратно.

    function names( array $names )
    {
        $_names = array_pop( $names );

        if( count( $names ) > 0 )
        return implode( ', ' , $names ) . ' e ' . $_names;

        return 'só ' . $_names;
    }

    // output: só eu
    echo names( ['eu'] );

    // output: eu e tu
    echo names( ['eu' , 'tu' ] );

    // output: eu, tu e ele
    echo names( ['eu' , 'tu' , 'ele' ] );
 9
Author: Papa Charlie, 2015-04-27 14:42:28

Другой способ сделать это-использовать логику, счетчики, объединять строки с e(да-да, есть пробелы), и в конце использовать preg_replace, чтобы заменить все e , ,, за исключением последнего, этот контроль осуществляется с помощью четвертого параметра, что это количество замен.

В примере массив из пяти элементов, станет строку с четырьмя e, теперь достаточно знать количество замен, сделанных, что это сумма элементов меньше двух, что является 3.

, Например 1

$itens = 1;
while ($listintegrantes = mysqli_fetch_array($query1)) {
       $integrantes = "$integrantes" . $listintegrantes['nome'] . " e ";
       $itens++;
}

$str = preg_replace('/ e /', ', ', $integrantes, $itens - 2);

Пример 2 ideon

$arr = array('john', 'Cyrax', 'john', 'Sonia', 'Sector');
$str = implode(' e ', $arr);
$itens = count($arr);
$str_formatada = preg_replace('/ e /', ', ', $str, count($arr)-2);
echo $str_formatada;

saida : john, Cyrax, john, Sonia e Sector
 7
Author: rray, 2015-04-27 22:10:07

Мог бы выглядеть так:

while ($listintegrantes = mysqli_fetch_array($query1)) {
    $integrantes = "$integrantes" . $listintegrantes['nome'] . ",";
}

$integrantes = rtrim($integrantes, ',') . '.';
 4
Author: Marcelo Diniz, 2015-04-27 14:27:41

И Другое решение можно получить позицию последнего вхождения символа в строку strrpos и заменить substr_replace, пример:

$arr = array('john', 'Cyrax', 'john', 'Sonia', 'Sector');
$str = implode(', ',$arr);
$str = substr_replace($str, ' e', strrpos($str,','), 1);
echo $str;

Пример Ideone

 4
Author: abfurlan, 2015-04-27 16:37:30