Удалить запятую из конца строки дополнительно

#php #mysql

#php #MySQL

Вопрос:

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

Вот скрипт, который я использую

 <?php
$sql = "SELECT * FROM markets WHERE id = 0 ORDER BY market_state";
$res = mysql_query($sql);
$list = array();
while ($r = mysql_fetch_object($res)) {
 $list[$r->market_state][$r->id]['market_cities'] = $r->market_cities;

}

foreach ($list as $market_state => $market_cities) {
echo '<h1>' . $market_state . '</h1>';

foreach ($market_cities as $cityId => $cityInfo) {
echo $cityInfo['market_cities']. ',';

// etc
}

}
?>
  

Ответ №1:

Другая альтернатива, которая действительно хорошо работает в этой ситуации, — создать строку и просто обрезать последнюю запятую.

 foreach ($market_cities as $cityId => $cityInfo) {
  $citystr .= $cityInfo['market_cities']. ',';
}
echo rtrim($citystr, ',');
  

Ответ №2:

Я думаю, что самый чистый способ — это сделать это…

 $data = array_map(function($item) { return $item['market_cities']; }, $market_cities);
$output = implode(',', $data);
  

Ответ №3:

Вы также можете использовать функцию объединения для вывода списка, разделенного запятыми, из массива. Поэтому вместо:

 foreach ($market_cities as $cityId => $cityInfo) {
    echo $cityInfo['market_cities']. ',';
    ...
    ...
}
  

Это будет выглядеть примерно так:

 $cities = join(",", $market_cities);
echo $cities;
  

Ответ №4:

Вы также можете позволить mysql выполнить эту работу, если вам не нужен этот «CityId»:

 <?php
$sql = "SELECT market_state,GROUP_CONCAT(market_cities) as market_cities FROM markets WHERE id = 0 GROUP BY market_state ORDER BY market_state";
$res = mysql_query($sql);
$list = array();
while ($r = mysql_fetch_object($res)) {
    $list[$r->market_state] = $r->market_cities;
}

foreach ($list as $market_state => $market_cities) {
    echo '<h1>' . $market_state . '</h1>';
    echo $market_cities;
}
  

Ответ №5:

 echo $cityInfo['market_cities'];
if(count($market_cities)<$i) {
    echo ",";
}
  

Самый простой способ сделать это.

Комментарии:

1. Подсчет одного и того же в цикле является избыточным, вы должны присвоить его переменной вне цикла.

2. Вероятно, вы захотите добавить код инициализации и увеличения, чтобы сделать его более понятным.