У меня есть этот код PHP:
foreach( $wpdb->get_results( ) as $key => $row) { echo "['". $row->DATE . "',". $row->total_sales . "],"; }
Это дает следующее:
['09-08-11',0],['09-09-11',0],['09-10-11',0],['09-11-11',0],
Как удалить последнюю запятую в цикле foreach?
Существует несколько подходов:
Из этих вариантов я бы, вероятно, использовал # 1, потому что он делает код чуть более самодокументированным.
php имеет функцию обрезки, дает ему строку и запятую.
$s = trim ($s,",")
Вам понадобится переменная для сохранения состояния запятой:
$comma = ""; ## don't need comma before first element foreach( $wpdb->get_results( ) as $key => $row) { echo $comma."['". $row->DATE . "',". $row->total_sales . "]"; $comma = ","; }
Обычно я так делаю.
$result = array(); foreach( $wpdb->get_results() as $key => $row ){ $result[] = "['". $row->DATE . "',". $row->total_sales . "]"; } echo implode( ',', $result );
Это немного более красноречиво (но, возможно, больше памяти неэффективно из-за временного массива).
Мне нравится идея impode, но я часто использую тернарный оператор, чтобы все было кратким. Многим не нравится троянец, но это очень хорошо известная конструкция на многих языках, поэтому я использую ее. В этом случае, если я на первой итерации $ results будет пустым, поэтому я не вставляю запятую, иначе я помещаю запятую в содержимое перед новыми данными:
$results = ''; foreach( $wpdb->get_results() as $key => $row) { $results .= (empty($results) ? '' : ',') . "['". $row->DATE . "',". $row->total_sales . "]"; } echo $results;
$numItems = count($wpdb->get_results()); $i = 0; foreach( $wpdb->get_results() as $key => $row) { if($i+1 == $numItems) { echo "['". $row->DATE . "',". $row->total_sales . "]"; } else{ echo "['". $row->DATE . "',". $row->total_sales . "],"; } $i++; }