Получить все имена и положить запятая, чтобы отделить друг от друга
Когда я получаю имена и добавляю в переменную, я не могу отделяет их от запятая обычно.
- должен быть запятая и точка в конце
- я не могу поместить каждое имя в разрыв строки с помощью
- Это трудно объяснить, но будет, например:
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.
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++;
}
Иначе было бы 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' ] );
Другой способ сделать это-использовать логику, счетчики, объединять строки с 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);
$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
Мог бы выглядеть так:
while ($listintegrantes = mysqli_fetch_array($query1)) {
$integrantes = "$integrantes" . $listintegrantes['nome'] . ",";
}
$integrantes = rtrim($integrantes, ',') . '.';
И Другое решение можно получить позицию последнего вхождения символа в строку strrpos и заменить substr_replace, пример:
$arr = array('john', 'Cyrax', 'john', 'Sonia', 'Sector');
$str = implode(', ',$arr);
$str = substr_replace($str, ' e', strrpos($str,','), 1);
echo $str;