В зависимости от результатов в одном цикле вывести результат в другом. Совместить.

Гриша К.

Новичок
В зависимости от результатов в одном цикле вывести результат в другом. Совместить.

Есть массив $lang['letters'] = array ('А', - 'Я'); состоящий из букв алфавита

Я вывожу его элементы в виде ссылок:
PHP:
foreach ($lang['letters'] as $row)
     {
  $letter_select .= '<a href="?letter='.$row.'" '.$select.'>'.$row.'</a> '."\n";       
     }

Есть другой массив $cities_array состоящий из 2500 элементов (строк)
PHP:
foreach ($cities_array as $row)
	{    
     if(substr($row['city'],0,1) == $lang['letters'][$] && $row['pay']=='yes')
      $select = 'style="color: red";'; 
     }
И мне нужно сделать так, чтобы
когда первая буква $row['city'] равна соотвествующей букве из массива $lang['letters'] и одновременно $row['pay']=='yes'
то url ссылка $letter_select должна быть красного цвета ($select = 'style="color: red";';)


Но я никак немогу совместить эти два цикла
foreach ($lang['letters'] as $row) и foreach ($cities_array as $row)
 

Гриша К.

Новичок
Здравствуйте (забыл написать). : )
Фанат, я вот смотрю кажется, что вроже все описал.
Вот здесь вот $lang['letters'][$] , поставил так [$] специально.

Попробую вот так описать:

Вывожу из базы данных названия городов, и их id (получается 1500. На заметку: это только часть городов России).
Данные у меня выводятся из БД в массив $cities_array, потом передается все это в соответствующую функцию, и я их вывожу при помощи цикла.
Города у которых $row['pay']=='yes' выводятся красным цветом.

Затем я решил разбить вывод городов, по алфавиту, т.е. чтобы был список букв. При нажатии на буву 'А' выводились города на букву 'А' и т.д.
И так же решил, чтобы если например среди городов на букву 'М', есть город у которого $row['pay']=='yes' , то эта буква также выделялась крсаным цветом.

Буквы вывожу так
PHP:
foreach ($lang['letters'] as $row) 
     { 
  $letter_select .= '<a href="?letter='.$row.'" '.$select.'>'.$row.'</a> '."\n";        
     }
И вот получается, что надо сделать так, что когда
первая буква города равнялась букве из алфавита и значение $row['pay'] для такого города было yes, то буква становилась красной ($select = '...red').
PHP:
foreach ($cities_array as $row) 
    {     
     if(substr($row['city'],0,1) == $lang['letters'][$] && $row['pay']=='yes') 
      $select = 'style="color: red";';  
     }
=================
Вот решил еще раз все так вот повторить, надесюь, что описал задачу верно.
SelenIT, надеюсь что щас критерий сравнения понятен.
 

SelenIT

IT-лунатик :)
Гриша К.

Т.е. на одной странице у тебя выводятся города на одну букву?
 

Гриша К.

Новичок
SelenIT, да правильно.
И если среди городов на букву 'М' есть хотябы один город у которого $row['pay']=='yes', то буква 'М' должна быть красной.
 

SelenIT

IT-лунатик :)
Так какой в [size=-2]moderated[/size] первый цикл? Просто сравнивай во втором цикле $row['city']{0} c $_GET['letter']...
 

SelenIT

IT-лунатик :)
Фанат

Разве это существенно? Текущая буква ведь в любом случае есть в параметре ссылки, сгенерированной первым циклом... или я туплю?
 

Гриша К.

Новичок
SelenIT, если сравнивать с $_GET['letter'], то буква будет выделяться когда я на нее нажму. А если она не нажата то выделяться не будет.
Если $_GET['letter']='А', а меня в списке городов на букву 'М', есть город красного цвета и мне нужно чтобы буква м тоже была красного, внезависимости от того на какую букву я смотю город.
 

Фанат

oncle terrible
Команда форума
существенно.
ему и это сравнение не нужно =)

-~{}~ 25.02.06 01:05:

ах вот оно как.
значит, нужно
 

Гриша К.

Новичок
Вот посмотрите, в данный момент первая буква города равна букве 'М' - 12 элемент массива.

$select = '';
foreach ($cities_array as $key)
{
if (substr($city,0,1) == $lang['letters'][12] && $pay=='yes') $select = 'style="font-weight: bold;"';
}

И если прям щас передать эту переменную, то полчится, что все буквы будут красные.

foreach ($lang['letters'] as $row)
{
$letter_select .= '<a href="?letter='.$row.'" '.$select.'>'.$row.'</a> '."\n";
}

Вот я незнаю как же мне так их совместить, чтобы во-первых переберались все элементы из массива $lang['letters'] и была красной так буква для которой есть например такое совпадение:
substr($city,0,1) == $lang['letters'][12] && $pay=='yes'

-~{}~ 25.02.06 01:09:

Я может быть неправильно объясняю вам, что мне нужно?
 

Фанат

oncle terrible
Команда форума
ты очень запутанно объясняешь.
если бы ты просто привёл здесь пример вывода - было бы гораздо лучше
но с третьей попытки у тебя удалось.

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

и я даже не знаю, что тебе объяснять - как делать правильно или научить тебя понимать, как работает цикл. но боюсь, эта, вторая задача, неподъёмная
 

SelenIT

IT-лунатик :)
[size=-1]торможу основательно... то одно условие забыл, то другое... сорри([/size]
 

Фанат

oncle terrible
Команда форума
а если нужны все буквы, то алгоритм усложняется, но совсем ненамного.

-~{}~ 25.02.06 01:17:

и смех и грех =)
SelenIT
вертай в зад =)

-~{}~ 25.02.06 01:28:

SelenIT
не, ты всё правильно написал.
начнём с того, что текущая буква у него должна быть не красная, а чёрная, без ссылки.

Ну, а если уж её красить, то придётся, да извращаться с возвратом по массиву. и использовать for вместо foreach

Гриша К.
ты бы не хапал всё сразу, а делал по очереди.
 

Гриша К.

Новичок
Вот когда я вывожу города русским буквами, я немогу их отсартировать средствами MYsql, я сортирую массив этих данных, тогда у меня города сортируются по русскому алфавиту.

Поэтому вобщем то я и работаю с массивами.
Как работате вот такой вот цикл к примеру,
foreach ($lang['letters'] as $row)
{
$letter_select .= '<a href="?letter='.$row.'" '.$select.'>'.$row.'</a> '."\n";
}
я понимаю, специально уделил время до этого, сидел читал, пробовал, и разобрался.

Так что средствами mysql Я не смогу работат, из-за того что я не могу отсортировать при помощи mysql горда в соотвествии русским алавитом.


Я надесюь ничего страшного, если я буду при вот сортировать массив данных из БД, и при помощи циклов, разбивать их по первым буквам алфавита?

Может быть, если вы меня поняли, дати какие-то наводки по тому, как мне реализовать такую вот задачу: Чтобы если есть хоть один город на букву 'М', то эта буква была красного цвета.

-~{}~ 25.02.06 01:35:

Фанат, текущую букву я буду оставлять ссылкой, но делать жирной, это-то я могу, я уже это сделол.

Так, что мне осталось сделать только, так чтобы буква была красной, если есть красны город на такую букву.

Надесюь, на важи подсказки.
 

Фанат

oncle terrible
Команда форума
я немогу их отсартировать средствами MYsql
ой, бедняжечка.
а не ты ли, в соседнем топике , только что высказывал жутко авторитетное мнение о том, что всё надо в базе хранить?

Видимо, если ты делаешь такие заявления, то ты у нас большой специплист по базам?

-~{}~ 25.02.06 01:38:

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

что неясно?
 

Гриша К.

Новичок
Фанат, это не заявление, это сообщение.
Я знаю, что несложно сделать поиск по данным зхранимым в БД. ИЗ БД можно, легко к примеру выводить названия этих статей на первой странице, если надо то выводить с ограничениями.
Ну и в книге (Люк, Веллинг и Лора Томсон), есть примеры, сайта, в котором статьи хранятся в базе данных.

У меня знаний-то совсем не много в программировании. Зашел на форум увидел вас, подумал эх фанат, наверно подскажет решение. Но вы как всегда, я заметил после нескольких сообщений начинаете просто наезжать, непонятно зачем.
===============

Может быть вы мне подскажите как реализовать например сортировку слов в соответсвии с русскими буквами средствами Mysql.
 

Гриша К.

Новичок
SelenIT, спасибо большое за ссылку. Буду разбираться.
Пойду лягу спать. С утра, попробую разобраться.
 
Сверху