|
|
|
| есть скрипт вывода погоды . при выборе города хочется чтобы было как тут http://weather.yandex.ru/russia/
все города отделяются большой буквой. как такое сделать из списка ? | |
|
|
|
|
|
|
|
для: dirol
(13.02.2009 в 11:21)
| | А города где находятся в массиве, в базе данных? | |
|
|
|
|
|
|
|
для: dirol
(13.02.2009 в 11:21)
| | Воспользуйтесь функцией
| |
|
|
|
|
|
|
|
для: AcidTrash
(13.02.2009 в 15:10)
| | в базе данных | |
|
|
|
|
|
|
|
для: dirol
(13.02.2009 в 16:15)
| | вообщем у меня из базы данных выводится список городов вот так
Австрия (AT)
Азербайджан (AZ)
Алжир (DZ)
Ангола (AO)
Армения (AM)
Афганистан (AF)
Бангладеш (BD)
Беларусь (BY)
Бельгия (BE)
Бенин (BJ)
Болгария (BG)
Босния и Герцеговина (BA)
Ботсвана (BW)
Буркина-Фасо (BF)
Бурунди (BI)
Великобритания (GB)
Вьетнам (VN)
Габон (GA)
Гвинея (GN)
Германия (DE)
Голландия (NL)
Гренландия (GL)
Греция (GR)
а хотелось бы так
А
Австрия (AT)
Азербайджан (AZ)
Алжир (DZ)
Ангола (AO)
Армения (AM)
Афганистан (AF)
Б
Бангладеш (BD)
Беларусь (BY)
Бельгия (BE)
Бенин (BJ)
Болгария (BG)
Босния и Герцеговина (BA)
Ботсвана (BW)
Буркина-Фасо (BF)
Бурунди (BI)
B
Великобритания (GB)
Вьетнам (VN)
Г
Габон (GA)
Гвинея (GN)
Германия (DE)
Голландия (NL)
Гренландия (GL)
Греция (GR)
вот как такое сделать | |
|
|
|
|
|
|
|
для: dirol
(13.02.2009 в 16:47)
| | Прям по ходу вывода стран из массива и выставлять буквы:
<?
$countries = getCountries(); // Получаем массив со странами
$current_first_symb = 'A';
$prev_first_symb = 'A';
echo "A<ul>";
for($i=0;$i<count($countries);$i++){
if($i > 0){
$current_first_symb = substr($countries[$i],0,1);
$prev_first_symb = substr($countries[$i-1],0,1);
}
if($current_first_symb != $prev_first_symb){
echo '</ul>'.$current_first_symb.'<ul>';
}
echo '<li>'.$countries[$i].'</li>';
}
echo '</ul>';
?>
|
PS. Для оптимизации, можно не определять постоянно предыдущий первый символ, а хранить последнюю смену и сравнивать с ним. | |
|
|
|
|
|
|
|
для: axxil
(13.02.2009 в 17:04)
| | а под базу как сделать подскажи пожалуйста.
$result = $db->sql_query("SELECT id, iso2, iso3, name FROM weather_country ORDER BY name");
while (list($id, $iso2, $iso3, $name) = $db->sql_fetchrow($result)) {
echo "<a href="">".$name."</a> ($iso2)<br />\n";
}
|
| |
|
|
|
|
|
|
|
для: dirol
(13.02.2009 в 17:13)
| |
<?
$result = $db->sql_query("SELECT id, iso2, iso3, name FROM weather_country ORDER BY name");
while (list($id, $iso2, $iso3, $name) = $db->sql_fetchrow($result)) {
$towns[] = $name;
$temps[] = $iso2;
}
foreach($towns as $key => $names){
$firstletter[$key] = substr($names, 0, 1);
}
$var = '';
foreach($towns as $key => $value){
if($var != $firstletter[$key]) echo 'Буква: '.$firstletter[$key].'<br />';
$var = $firstletter[$key];
echo '<a href="">'.$value.'</a> ('.$temps[$key].')'."<br />\n";
}
|
| |
|
|
|
|
|
|
|
для: nikita2206
(13.02.2009 в 17:27)
| | Зачем делать 3 цикла, когда можно спокойно одним обойтись? | |
|
|
|
|
|
|
|
для: Axxil
(13.02.2009 в 17:47)
| | потомучто у меня похмелье.... кстати ваше решение длинее и непонятнее... | |
|
|
|
|
|
|
|
для: nikita2206
(13.02.2009 в 17:51)
| | > кстати ваше решение длинее и непонятнее...
[в ужасе убежал учиться] | |
|
|
|
|
|
|
|
для: Axxil
(13.02.2009 в 17:54)
| | мда | |
|
|
|
|
|
|
|
для: Axxil
(13.02.2009 в 17:47)
| | Вот вам один и всё коротко и ясно....
<?
$result = $db->sql_query("SELECT id, iso2, iso3, name FROM weather_country ORDER BY name");
$var = '';
while (list($id, $iso2, $iso3, $name) = $db->sql_fetchrow($result)) {
if($var != $name{0}) echo '<br />Буква: '.$name{0}.'<br />';
$var = $name{0};
echo '<a href="'.$id.'">'.$name.'</a> ('.$iso2.')'."<br />\n";
}
|
| |
|
|
|
|
|
|
|
|
для: Trianon
(13.02.2009 в 19:02)
| | у меня голова болит читать, скажите пож-ста в чем суть? как я мельком разглядел в 6 версии {} будут использоватся для инициализации массивов?? | |
|
|
|
|
|
|
|
для: nikita2206
(13.02.2009 в 19:09)
| | Наборот, вообще снесут эту штуку. | |
|
|
|
|
|
|
|
для: BinLaden
(13.02.2009 в 19:11)
| | понял:
<?
$result = $db->sql_query("SELECT id, iso2, iso3, name FROM weather_country ORDER BY name");
$var = '';
while (list($id, $iso2, $iso3, $name) = $db->sql_fetchrow($result)) {
if($var != $name[,1]) echo '<br />Буква: '.$name[,1].'<br />';
$var = $name[,1];
echo '<a href="'.$id.'">'.$name.'</a> ('.$iso2.')'."<br />\n";
}
|
както так... | |
|
|
|
|
|
|
|
для: nikita2206
(13.02.2009 в 19:14)
| | выбрал в итоге этот вариант)) спасибо | |
|
|
|
|
|
|
|
для: dirol
(13.02.2009 в 17:13)
| |
<?
$result = $db->sql_query("SELECT id, iso2, iso3, name FROM weather_country ORDER BY name");
$current_first_symb = 'A';
$last_first_symb = 'A';
echo "A<ul>";
while ($country = $db->sql_fetchrow($result)) {
$current_first_symb = substr($country[3],0,1);
if($current_first_symb != $last_first_symb){
echo '</ul>'.$current_first_symb.'<ul>';
$last_first_symb = $current_first_symb;
}
echo '<li>'.$country[3].'</li>';
}
echo '</ul>';
?>
|
| |
|
|
|
|
|
|
|
для: dirol
(13.02.2009 в 16:47)
| | при помощи циклов сделайте два массива, при этом чтобы в первом хранились города, а во втором буква каждого...
примерно так:
<?
$towns = <<<towns
Австрия (AT)
Азербайджан (AZ)
Алжир (DZ)
Ангола (AO)
Армения (AM)
Афганистан (AF)
Бангладеш (BD)
Беларусь (BY)
Бельгия (BE)
Бенин (BJ)
Болгария (BG)
Босния и Герцеговина (BA)
Ботсвана (BW)
Буркина-Фасо (BF)
Бурунди (BI)
Великобритания (GB)
Вьетнам (VN)
Габон (GA)
Гвинея (GN)
Германия (DE)
Голландия (NL)
Гренландия (GL)
Греция (GR)
towns;
$towns = explode("\n", $towns);
foreach($towns as $key => $names){
$firstletter[$key] = substr($names, 0, 1);
}
$var = '';
foreach($towns as $key => $value){
if($var != $firstletter[$key]) echo 'Буква: '.$firstletter[$key].'<br />';
$var = $firstletter[$key];
echo 'Город: '.$value.'.'."\r\n<br /><br />";
}
|
| |
|
|
|
|
|
|
|
для: nikita2206
(13.02.2009 в 17:12)
| | спасибо всем! | |
|
|
|
|
|
|
|
для: dirol
(13.02.2009 в 17:31)
| |
<?
$result = $db->sql_query("SELECT id, iso2, iso3, name FROM weather_country ORDER BY name");
while (list($id, $iso2, $iso3, $name) = $db->sql_fetchrow($result)) {
$towns[] = $name;
$temps[] = $iso2;
$ids[] = $id;
}
foreach($towns as $key => $names){
$firstletter[$key] = substr($names, 0, 1);
}
$var = '';
foreach($towns as $key => $value){
if($var != $firstletter[$key]) echo 'Буква: '.$firstletter[$key].'<br />';
$var = $firstletter[$key];
echo '<a href="'.$ids[$key].'">'.$value.'</a> ('.$temps[$key].')'."<br />\n";
}
|
| |
|
|
|
|
|
|
|
для: dirol
(13.02.2009 в 11:21)
| | наверно лучше начать с :
SELECT
LEFT(`name`,1) as `letter`,
GROUP_CONCAT(`name`) as `names`
FROM
`tbl`
GROUP BY `letter`
|
или сразу с переносом сделать
SELECT
LEFT(`name`,1) as `letter`,
GROUP_CONCAT(`name` SEPARATOR"<br />") as `names`
FROM
`tbl`
GROUP BY `letter`
|
| |
|
|
|
|
|
|
|
для: а-я
(13.02.2009 в 18:01)
| | =) не знаю, здраво ли я мыслю.
но я так сделал:
<?
$_SQL = '
SELECT
LEFT(`name`,1) as `letter`,
GROUP_CONCAT(CONCAT("<a href=\"./?id=",`id`,"\">",`name`,"</a> (", `iso2`,")<br />") SEPARATOR"")
FROM
`weather_country`
GROUP BY `letter`
';
$result = $db->sql_query($_SQL);
while(list($letter,$countryes) = $db->sql_fetchrow($result)){
echo $letter.'<br />';
echo $countryes.'<br />';
}
?>
|
не нашел для чего Вам $iso3 и $id | |
|
|
|
|
|
|
|
для: а-я
(13.02.2009 в 18:32)
| | по большому счету, и группирующий запрос и собственно GROUP_CONCAT здесь притянуты за уши.
Особой экономии они не дают, а ограничения накладывают.
К тому же, так конкатенировать текст с тегами просто нельзя - фаза htmlspecialchars оказывается выкинутой. Если в именах будет какая фигня - ой.
Короче - здесь - овчинка выделки не стоит. | |
|
|
|
|
|
|
|
для: Trianon
(13.02.2009 в 18:40)
| | =) да, на счет этого тож думал.
но не думаю, что так все печально для название страны и погоды. | |
|
|
|
|
|
|
|
для: а-я
(13.02.2009 в 18:51)
| | > не думаю
И так -- постоянно! :) | |
|
|
|
|
|
|
|
для: BinLaden
(13.02.2009 в 19:00)
| |
static $massiv;
if (!is_array($massiv)) {
$result = $db->sql_query("SELECT id, iso2, iso3, name FROM weather_country");
while (list($id, $iso2, $iso3, $name) = $db->sql_fetchrow($result)) $massiv[] = array($id, $iso2, $iso3, $name);
}
if ($massiv) {
foreach ($massiv as $key => $val) {
$firstletter[$key] = substr($val[3], 0, 1);
$nom[$key]=$val[0];
}
}
$var = "";
foreach($massiv as $key => $value){
if($var != $firstletter[$key]) echo "Буква: ".$firstletter[$key]."<br />";
$var = $firstletter[$key];
echo "Город: <a href=".$nom[$key].">".$value[3]."</a><br /><br />";
}
|
я вот так сделал.
так какой из предложеных вариантов лучше? меньше ресурсоемкий? | |
|
|
|
|
|
|
|
для: dirol
(13.02.2009 в 19:27)
| | ждем ответа Трианона)
П.С. я незнаю на чем вы код пишите, может на дримвейвере или еще чем, я вас умоляю, скачайте себе еклипс или зенд иде.....а то отступы вы в непонятных местах както делаете.... | |
|
|
|
|
|
|
|
для: nikita2206
(13.02.2009 в 19:33)
| | а чо я?
Три цикла вместо одного , полное дублирование результата запроса в памяти...
Что мне тут смотреть?
Насчет отступов согласен...
Здесь за эти отступы надо половину народа деревянными пулями расстрелять.
Половину за отступы, половину за то, что строки длинные переносить не считают нужным. | |
|
|
|