Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Сортировка вывода printf() по одному из числовых значений
 
 автор: sega_z   (28.03.2013 в 01:16)   письмо автору
 
 

Подскажите, пожалуйста, можно ли отсортировать вывод результатов функцией printf() по убыванию числовых значений?

Например, сортировка выводимых записей по возрасту (по убыванию):


printf ("Имя: %s, возраст: %u", $name,$vozrast);


Если можно, покажите пожалуйста на примере кода.

  Ответить  
 
 автор: Valick   (28.03.2013 в 07:12)   письмо автору
 
   для: sega_z   (28.03.2013 в 01:16)
 

$name,$vozrast откуда берете?

  Ответить  
 
 автор: sega_z   (28.03.2013 в 12:36)   письмо автору
 
   для: Valick   (28.03.2013 в 07:12)
 

$name - строковые записи из базы данных, а $vozrast вычисляет одна из функций.
Точнее, $vozrast это числовые результаты сравнения двух строк функцией similar_text(); по которым и нужно сортировать записи из базы данных (просто немного не удачный я привел пример).

  Ответить  
 
 автор: Valick   (28.03.2013 в 12:43)   письмо автору
 
   для: sega_z   (28.03.2013 в 12:36)
 

$vozrast это числовые результаты сравнения двух строк

а что обычная дата рождения не указана в БД???

  Ответить  
 
 автор: sega_z   (28.03.2013 в 12:57)   письмо автору
 
   для: Valick   (28.03.2013 в 12:43)
 

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

Или все таки нужно выводить строковые значения $name из б.д., затем определять переменную $vozrast, затем заносить её в б.д., а затем уже выводить с использованием ORDER BY - это же долго и лишняя нагрузка на сервер?

  Ответить  
 
 автор: confirm   (28.03.2013 в 12:44)   письмо автору
 
   для: sega_z   (28.03.2013 в 12:36)
 

Функция printf() ничего не сортирует, не ее это задачи, она может вывести только в указанном порядке.

  Ответить  
 
 автор: sega_z   (28.03.2013 в 12:59)   письмо автору
 
   для: confirm   (28.03.2013 в 12:44)
 

Ну а как задать этот порядок, чтобы printf() выводила в цикле do while значения $vozrast и $name в порядке убывания $vozrast ?

Или все таки нужно выводить строковые значения $name из б.д., затем определять переменную $vozrast, затем заносить её в б.д., а затем уже выводить с использованием ORDER BY - это же долго и лишняя нагрузка на сервер?

  Ответить  
 
 автор: confirm   (28.03.2013 в 13:20)   письмо автору
 
   для: sega_z   (28.03.2013 в 12:59)
 

Почему именно do while? Сдается, что у вас это "болезнь" распространенная. Просто while.
А как указать порядок вывода переменных описано в описании функции sprintf. Это порядок вами указываемый, который отношения к сортировке не имеет, сортировать надо до вывода. А с проблемами запроса в другой раздел.

  Ответить  
 
 автор: Sfinks   (28.03.2013 в 14:28)   письмо автору
 
   для: sega_z   (28.03.2013 в 12:59)
 

> Ну а как задать этот порядок, чтобы printf() выводила в цикле do while значения $vozrast и $name
> в порядке убывания $vozrast ?

printf() не выводит ни в каком порядке.
printf вызывается столько раз, сколько раз повторяется код цикла.
Если вы напишете
<?php
  
for($i=1;$i<=3;$i++){
    
printf("%d",$i);
  }
это будет то же самое, что и
<?php
  printf
("%d",1);
  
printf("%d",2);
  
printf("%d",3);

Следовательно, у вас вывод идет в том порядке, в котором у вас представлены исходные данные.
Если вас это не устраивает, значит нужно отсортировать исходные данные.

Т.к. в MySQL (на сколько я знаю) нет аналога функции similar_text(), придется сортировать в PHP.
Для этого нужно занести результат запроса в многомерный массив и воспользоваться функцией array_multisort().
Примерно так:
<?php
  $data 
= array();
  
$name = array();
  
$vozrast = array();
  
$res // MySQL-запрос
  // заносим данные в массивы
  
while( $row mysql_fetch_assoc($res) ){
    
$data[] = $row;
    
$name[] = $row['name'];
    
$vozrast[] = // как вы там вычисляете его....
  
}
  
// сортируем результат
  
array_multisort($vozrastSORT_DESC$nameSORT_ASC$data);
  
// а вот только теперь выводим
  
foreach($data as $d)
    
printf ("Имя: %s, возраст: %u"$d['name'],$d['vozrast']);

P.S. Пишу в браузере из головы, так что возможны опечатки.

  Ответить  
 
 автор: sega_z   (28.03.2013 в 15:01)   письмо автору
 
   для: Sfinks   (28.03.2013 в 14:28)
 

Спасибо за идею, сейчас попробую использовать...

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования