PHP объединить значения из цикла

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: Верно, я использовал неправильное слово. Я уже отредактировал свой ответ, спасибо!