2010-09-17 2 views
3

Я знаю, что этот вопрос не вызывает сомнений во многих случаях. Хотя я могу найти решение. Так простите меня, если это путь к простому.Как объединить все элементы массива с помощью запятой?

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

E.g.

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

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

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

ответ

6

Вы можете:

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'], который выглядит чище IMO.

+0

Спасибо, что я пошел на метод implode, который отлично работает. Спасибо за подсказку об псевдонимах. – nickifrandsen

+0

Обновите свой отзыв: $ countByMonth ['count'] до $ countByMounth ['COUNT (id)'], в любом случае отличный ответ. – Chris

5

Простого решения:

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

В качестве альтернативы, вы можете implode() значение. Или - может быть, легче читать/понять/сохранить - сцепить все это в строку и удалить последний «,» (SO ест мой пробел, строка запятой пробел):

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

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

См. комментарии.

+0

Как вы вызываете первое решение «простой» вне меня. – quantumSoup

+0

@quantumSoup :) Думаю, ты прав. Это было очень просто в моей голове ... и очень многословно, когда я это написал: -S – jensgram

+0

@quantumSoup Возможно, если бы я определил «простой» как * с небольшими изменениями в том, что у вас уже было, но, возможно, не то, что вы если вам нечего было начинать с * :) – jensgram

3

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

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

echo implode(', ',$arr); 
+1

'$ arr = $ countByMonth [" COUNT (id) "]' должно быть '$ arr [] = ...' –

+0

@jens Это было неправильно – quantumSoup

+0

@quantumSoup Я вижу , – jensgram

2

Или потом просто обрезать его с RTRIM ($ с,», ')

0

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

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

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

$str = ''; 
if(count($array)) { 
    $str = array_shift($array); 
    foreach($array as $element) { 
    $str .= ', '.$element; 
    } 
} 
Смежные вопросы