Как мне объединить все элементы в массиве, используя запятую? - PullRequest
3 голосов
/ 17 сентября 2010

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

Вопрос в том, как получить доступ к концу цикла while.

Например,

    while($countByMonth = mysql_fetch_array($countByMonthSet)) { 
            $c = $countByMonth["COUNT(id)"];
            echo $c . "," ; 
        }

Как мне управлять отдельнымизначение цикла while через запятую, но, конечно, я не хочу запятую в конце значения.

Заранее большое спасибо за вашу помощь:)

Ответы [ 6 ]

6 голосов
/ 17 сентября 2010

Вы можете:

1) Создайте строку и удалите последний символ:

$c = '';
while ($countByMonth = mysql_fetch_array($countByMonthSet)) { 
    $c .= $countByMonth["COUNT(id)"] . ',';
}

$c = substr($c, 0, -1);
echo $c;

2) Создайте массив и используйте implode()

$c = array();
while ($countByMonth = mysql_fetch_array($countByMonthSet)) { 
    $c[] = $countByMonth["COUNT(id)"];
}

echo implode(',', $c);

Подсказка: Вы можете использовать псевдонимы в своем запросе, например: SELECT COUNT(id) as count FROM .... Тогда вы можете получить к нему доступ как $countByMonth['count'], что выглядит чище ИМО.

5 голосов
/ 17 сентября 2010

Простое решение 1 :

$isFirst = true;
while($countByMonth = mysql_fetch_array($countByMonthSet)) { 
    $c = $countByMonth["COUNT(id)"];
    if ($isFirst) {
        $isFirst = false;
    } else {
        echo = ', ';
    }
    echo $c; 
}

В качестве альтернативы, вы можете implode() значения.Или - возможно, легче читать / понимать / поддерживать - объединить все в строку и удалить последний "," (ТАК я ем пробел; строка запятая):

$list = '';
while($countByMonth = mysql_fetch_array($countByMonthSet)) { 
    $c = $countByMonth["COUNT(id)"];
    $list .= $c . ', '; 
}
echo substring($list, 0, -2); // Remove last ', '

(В нескольких других ответах предлагается использовать накопленный массив, а затем использовать implode(). С точки зрения производительности этот метод будет лучше конкатенации строк.)

1 См. Комментарии.

3 голосов
/ 17 сентября 2010

В качестве альтернативы вы можете сделать:

$arr = array();
while($countByMonth = mysql_fetch_array($countByMonthSet)) { 
   $arr[] = $countByMonth["COUNT(id)"];
}

echo implode(', ',$arr);
2 голосов
/ 17 сентября 2010

Или потом просто обрежьте его с помощью rtrim ($ c, ',')

0 голосов
/ 17 сентября 2010

Хотя я думаю, что решение для взрыва лучше всего, в ситуациях, когда вы не можете использовать взлом, подумайте об основном алгоритме иначе. Вместо "как я могу добавить запятую за каждым элементом, кроме последнего?" Задайте себе вопрос: «Как добавить запятую перед каждым элементом, кроме первого?»

$str = '';
$count = count( $array );
if( $count ) {
  $i = 0;
  $str = $array[$i];
  $i++;
  while( i < $count ) {
    $str .= ','.$array[$i];
    $i++;
  }
}

Если вы «сдвинете» первый элемент, вы можете использовать цикл foreach:

$str = '';
if( count( $array ) ) {
  $str = array_shift( $array );
  foreach( $array as $element ) {
    $str .= ', '.$element;
  }
}
0 голосов
/ 17 сентября 2010

Ты это:

int count;//

while(i)
{
    count=i;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...