[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите с сортировкой массива
php_new
У меня есть база mysql, где расположены различные названия в столбце name, при выводе мне нужно получить что-то типо

-А-
арбуз
апельсин
акула

-Б-
бобры
банан

-В-
....

и тд, то есть отсортировать массив по первой букве и вывести соответственно, подозреваю что тут нужно использовать регулярные выражения, но пока что ничего у меня не выходит, расчитываю на помощь.
Вот код вывода без разделения на буквы как надо, а просто по возрастанию (в алфавитном порядке).

$sql = "SELECT `alf` FROM `alfavit`";
$result = mysql_query($sql);
while($row = mysql_fetch_array($result)){
$alf=$row["alf"];

echo"<dt>$alf</a>";
}



Спустя 1 минута, 16 секунд (17.09.2009 - 17:11) php_new написал(а):
*в столбце alf

Спустя 2 минуты, 12 секунд (17.09.2009 - 17:13) stepan написал(а):
Если я правильно тебя понял то тебе понадобиться ORDER BY `alf`

Спустя 3 минуты, 37 секунд (17.09.2009 - 17:16) php_new написал(а):
$sql = "SELECT `alf` FROM `alfavit` ORDER BY `alf`";
$result = mysql_query($sql);
while($row = mysql_fetch_array($result)){
$alf=$row["alf"];

echo"<dt>$alf";
}

некоторые опечатки были, ORDER BY решает задачу сортировки по возрастанию, но мне все значения надо разбить по начальным буквам, как я указал в теме ) А это уже не выходит

Спустя 9 минут, 50 секунд (17.09.2009 - 17:26) Michael написал(а):
Цитата (php_new @ 17.09.2009 - 14:16)
но мне все значения надо разбить по начальным буквам, как я указал в теме ) А это уже не выходит

Ты хочешь чтобы прям в результатах запроса кроме слов были строки:
-А-
-Б-
Так что ли?

Спустя 8 минут, 45 секунд (17.09.2009 - 17:35) php_new написал(а):
да

Спустя 4 минуты, 45 секунд (17.09.2009 - 17:40) php_new написал(а):
меня даже не пугает вариант, если содержимое каждой буквы будет выводиться отдельным циклом, важен лишь результат, которого я добиться пока не смог

Спустя 1 час, 4 минуты, 24 секунды (17.09.2009 - 18:44) Guest написал(а):
проверяй в цикле
который у тебя уже есть
если первая буква в слове (которое в переменной $alf)
изменилась, то выводи букву а потом уже
echo"<dt>$alf</a>";

и используй теги кода php/sql/html

Спустя 12 минут, 50 секунд (17.09.2009 - 18:57) php_new написал(а):
меня интересует как это сделать, теоретически я понимаю что должно быть, но как это сделать на практике )
Кто-нить может модернизировать мой код или привести свой, как это реализовать user posted image

Спустя 8 минут, 33 секунды (17.09.2009 - 19:06) Guest написал(а):
у нас тут помогают, а не решают за когото не на пользу просящему
php.net -> функция:
substr()
и одно условие if

и твои варианты, - если что поправят я думаю

Спустя 8 минут, 57 секунд (17.09.2009 - 19:15) php_new написал(а):
пробовал уже и substr, ничего не вышло... мне кажется код не большой будет, если кто-то знает решение, то 2-3 строки добавить к коду не составит труда, я уже неделю мучаюсь, ладно еще неделю помучаюсь.

Спустя 38 секунд (17.09.2009 - 19:15) Guest написал(а):
ну так напиши что ты там придумал с substr

Спустя 30 секунд (17.09.2009 - 19:16) Michael написал(а):
PHP
$sql = "SELECT `alf` FROM `alfavit` ORDER BY `alf`";
$result = mysql_query($sql);
$bukv='';
$row = mysql_fetch_array($result);
do 
{
  $alf=$row["alf"];
  $bukvnew=strtoupper(substr($alf,0,1));
  if ($bukvnew!=$bukv) {
      echo '-'.$bukvnew.'-<br>';
      $bukv=$bukvnew;
  }
  echo $alf,'<br>';
}
while(
$row = mysql_fetch_array($result))

Спустя 6 минут, 41 секунда (17.09.2009 - 19:22) Guest написал(а):
сломал весь учебный процесс.. ай ай..

Спустя 3 минуты, 1 секунда (17.09.2009 - 19:25) Michael написал(а):
Цитата (Guest @ 17.09.2009 - 16:15)
сломал весь учебный процесс.. ай ай.. .

Guest - очень хотелось ответить -
это мой первый ответ в "PHP для знатоков"
biggrin.gif biggrin.gif biggrin.gif biggrin.gif biggrin.gif

Спустя 5 минут, 51 секунда (17.09.2009 - 19:31) php_new написал(а):
Guest
Michael

Огромное искреннее спасибо !!! Впервые за помощью обращаюсь на форум и сразу успешно, спасибо вам еще раз ))

Спустя 1 минута, 30 секунд (17.09.2009 - 19:33) php_new написал(а):
Учебный процесс не сломан )) Указали мне на мои дыры в знаниях php, залатывать буду )

Спустя 27 минут, 56 секунд (17.09.2009 - 20:01) kirik написал(а):
Michael
Эт самое.. а зачем там do-while?

Спустя 1 минута, 32 секунды (17.09.2009 - 20:02) Guest написал(а):
ну что бы два раза написать mysql_fetch_array
это же очевидно! )

Спустя 2 минуты, 16 секунд (17.09.2009 - 20:04) php_new написал(а):
да, связку do while я убрал ) но вцелом решение именно то, что надо )

Спустя 11 часов, 47 минут, 19 секунд (18.09.2009 - 07:52) Michael написал(а):
Цитата (kirik @ 17.09.2009 - 17:01)
Michael
Эт самое.. а зачем там do-while?

Первоначальное значение сначала хотел присвоить из первой строки, а не пусто - но потом подумал что и пусто сойдет, а цикл остался... smile.gif

Спустя 2 часа, 30 минут, 7 секунд (18.09.2009 - 10:22) Gram написал(а):
А можно знаете еще как. добавить в таблицу записи типа:
Аааа
Аяяя

Бааа
Бяяя

и т.д.
тогда можно обойтись одним циклом для вывода всего алфавита.

потом после приведенного выше запроса данные выстоятся так:

Аааа
Арбуз
Апельсин
Акула
Аяяя
Бааа
Банан
Бобры
Бяяя

потом регулярками заменяете Бааа на открывающий элемент дизайна с буквой "б", а яяя на закрывающий элемент дизайна.

проблем с сортировкой никогда не возникнет, если будете обрабатывать все входящие в базу данные $name=ucfirst(strtolower($name));

Спустя 1 час, 4 минуты, 48 секунд (18.09.2009 - 11:27) Michael написал(а):
Gram, в базе должны храниться данные, а не какие-то оформительные элементы wink.gif .

Спустя 1 месяц, 12 дней, 11 часов, 57 минут, 14 секунд (31.10.2009 - 00:24) Guest написал(а):
hh
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.