#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. Вероятно, вы захотите добавить код инициализации и увеличения, чтобы сделать его более понятным.