php
#php
Вопрос:
Если я хочу отобразить текст следующим образом в примере, как это можно сделать?
$tmp=mysql_query("SELECT ... FROM ....");
$total=mysql_num_rows($tmp);
$tekst1='Your total number of friends are: '.$total.'. Your friends are: ';
while($p=mysql_fetch_array($tmp)) {
$tekst2=$p['friend'].", ";
}
$text_complete=$tekst1.$tekst2;
echo $text_complete;
$text_complete должен выглядеть так: «Ваше общее количество друзей: 3. Ваши друзья: Джон, Майк, Майкл». Но, используя этот код выше, я получаю «Ваше общее количество друзей: 3. Ваши друзья: Джон,»
Как я могу объединить оба текста, тот, который получен из цикла, и тот, который исправлен?
Ответ №1:
Я думаю, вы должны сделать так:
$tmp=mysql_query("SELECT ... FROM ....");
$total=mysql_num_rows($tmp);
$tekst1='Your total number of friends are: '.$total.'. Your friends are: ';
$friends = array();
while($p = mysql_fetch_array($tmp)) {
$friends[] = $p['friend'];
}
$tekst2= implode(', ', $friends);
$text_complete=$tekst1.$tekst2;
echo $text_complete;
в противном случае вы перезаписываете переменную каждый раз!
РЕДАКТИРОВАТЬ — я исправил код, чтобы использовать implode, как в ответе Xaerxess. Ранее я просто объединял и использовал substr, чтобы удалить конечную запятую и пробел
Комментарии:
1. Это верно, но вы должны использовать его в $ tekst1, поэтому вам не нужны $tekst2 и $text_complete..
2. @Nicola Peluchetti — я получаю сообщение об ошибке: «Неопределенная переменная: текст2 в строке 25». Эта строка: «$tekst2.=$ p[‘friend’].», «;»
3. @Nicola Peluchetti -Я нашел, почему это происходит. Теперь он работает нормально. Спасибо.
4. версия implode в других комментариях лучше
Ответ №2:
Вы можете использовать:
$tekst2 .= $p['friend'].", ";
Чтобы добавить к переменной (а не перезаписывать ее. Затем удалите конечную запятую:
$text_complete=$tekst1. rtrim( $tekst2, "," );
Ответ №3:
$tekst2 = new Array();
while($p=mysql_fetch_array($tmp)) {
$tekst2[] = $p['friend'];
}
$text_complete = $tekst1 . implode(', ',$tekst2);
Но лучше было бы использовать GROUP_CONCAT
в sql
Ответ №4:
$tmp=mysql_query("SELECT ... FROM ....");
$total=mysql_num_rows($tmp);
$tekst = '';
$tekst='Your total number of friends are: '.$total.'. Your friends are: ';
while($p=mysql_fetch_array($tmp)) {
$tekst.=$p['friend'].", ";
}
echo $tekst;
Ответ №5:
$tmp=mysql_query("SELECT ... FROM ....");
$total=mysql_num_rows($tmp);
$tekst1='Your total number of friends are: '.$total.'. Your friends are: ';
while($p=mysql_fetch_array($tmp))
{
$tekst1 .= $p['friend'].", "; // add friend names from MySQL result.
}
$tekst1 = substr($tekst2, 0, -2);//Remove comma.
echo $tekst1; // Outputs the wanted string
Ответ №6:
Используйте функцию PHP implode / join, чтобы в конце не было запятой. В этом случае:
$fiends = array();
while($p = mysql_fetch_array($tmp)) {
$friends[] = $p['friend'];
}
implode(', ', $friends);
РЕДАКТИРОВАТЬ: я в основном удвоил ответ Билли Муна. Более того, не используйте mysql_*
функции — они устарел не рекомендуется — см. Комментарии ниже.
Комментарии:
1. функции mysql_ * устарели кем? Ссылка?
2.@George Cummins: согласно PHP docs
mysql_*
, расширение не разработано, не рекомендуется MySQL для новых проектов, не поддерживает все функции MySQL 4.1 . Как говорится: если вы используете MySQL версии 4.1.3 или более поздней, настоятельно рекомендуется вместо этого использовать расширение mysqli.3. Существует разница между указанными вами деталями и устареванием. Устаревание — это «статус, применяемый к функциям программного обеспечения, чтобы указать, что их следует избегать». ( en.wikipedia.org/wiki/Deprecation ) При подходящих обстоятельствах не нужно избегать функций mysql_ *. PDO или mysqli * могут быть более подходящими в некоторых случаях, но не во всех.
4. @George Cummins: Верно, я использовал неправильное слово. Я уже отредактировал свой ответ, спасибо!