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

Форум PHP

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Вывод по рейтингу!

Сообщения:  [1-10]   [11-17] 

 
 автор: Sobachka   (18.01.2008 в 02:56)   письмо автору
 
   для: Maxam   (17.01.2008 в 21:47)
 

mysql...

   
 
 автор: Maxam   (17.01.2008 в 21:47)   письмо автору
 
   для: Maxam   (17.01.2008 в 18:15)
 

ЛЮДИ!!! НУ КАК СДЕЛАТЬ ВЫВОД С БОЛЬШЕГО ЗНАЧЕНИЯ А НЕ НАОБОРОТ!!!???
ПОЖАЛУЙСТА, СКАЖИТЕ!!!

   
 
 автор: Maxam   (17.01.2008 в 18:15)   письмо автору
 
   для: Maxam   (17.01.2008 в 16:54)
 

Так что, там если наоборот это весь код нужно переворачивать?
Просто я пробовал array_reverse, но чо-то так с ним и не вышло (((

   
 
 автор: Maxam   (17.01.2008 в 16:54)   письмо автору
 
   для: vitali   (17.01.2008 в 11:49)
 

оЙ! Кароче всё робит, кроме одного!!! Он всегда выводит с самых маленьких значений до самых больших!!! А мне нужно наоборот! Как сделать?

   
 
 автор: vitali   (17.01.2008 в 16:54)   письмо автору
 
   для: Maxam   (17.01.2008 в 16:23)
 

Попорядку:
1) выход из ф-ции priceCmp (return) возвращает в зависимости от результатов сравнения {0,1,-1}
2) В контексте вашего самого первого обращения
пор_номер(от0 до $count)|Имя|Рейтинг(от 0 до бескон.)
Как выстроить при выводе от самых рейтинговых, до низших (т.е. от больших чисел к меньшим)? Пример Вашего скрипта работает неправильно по двум причинам:
А) в ключе price (д.б. рейтинг) т.е. $a2
Б) причем т.к. ф-ция возвращает все эл-ты типа string (в вашем случае), то $a2 надо перевести в int, иначе priceCmp() отработает неверно.
Рабочий вариант Вашего примера:

<?php ## Сортировка строк файла с 3-я полями разделитель (|) 
    // функция сортировки
function priceCmp $a$b ){
        if ( 
$a[price] == $b[price] )  { return 0; }
        return ( 
$a[price] < $b[price] ) ? : -1;
}
// считываем данные из файла в массив уровней
$file file ("SortStrFile.dat"); //Читает содержимое файла и помещает его в массив

$lines count ($file); // количество строк в файле

    // запускаем цикл
for($i=0$i<$lines$i++){
    
// раскладываем уровни на элементы
        
list($a0$a1$a2) = explode ("|",$file[$i]);
    
// $a0 - Текущий номер
    // загоняем элементы в массив
    // $a1 - это имя участников
    // $a2 - рейтинг
        
if (gettype($a2) != "integer"$a2 = (int) $a2;
        
$array[$i] = array(price => $a2name => array($a0$a1$a2));
}

usort($arraypriceCmp); //сортируем массив
    //прогоняем отсортированный массив в цикле и выводим на печать
foreach ($array as $keys => $value){
        foreach (
$value as $key => $val){
            
// если не массив, то печатаем переход на новую строку
                
if(!is_array($val)){ print "<br>\n"; continue;}
            
// если массив, то это уже отсортированные наши данные
                
foreach ($val as $v){
                        
// печатаем данные
                        
print $v." ";
                }
        }
}
?>

   
 
 автор: Maxam   (17.01.2008 в 16:23)   письмо автору
 
   для: vitali   (17.01.2008 в 11:49)
 

Так что делает return?

   
 
 автор: vitali   (17.01.2008 в 11:49)   письмо автору
 
   для: Maxam   (16.01.2008 в 19:07)
 

По моему фрагмент:

function priceCmp ( $a, $b ){
if ( $a[price] == $b[price] ) return 0;
if ( $a[price] < $b[price] ) return -1; return 1;}

должен выглядеть так:

function priceCmp ( $a, $b ){
        if ( $a[price] == $b[price] )  { return 0; }
        return ( $a[price] < $b[price] ) ? -1 : 1;
}

более читабелен.

   
 
 автор: Maxam   (16.01.2008 в 19:07)   письмо автору
 
   для: Blizard   (16.01.2008 в 14:29)
 

Не, вот это все вроде разобрался:

<?php
    
// функция сортировки
function priceCmp $a$b ){
if ( 
$a[price] == $b[price] ) return 0;
if ( 
$a[price] < $b[price] ) return -1; return 1;}


    
// считываем данные из файла в массив уровней
$file file ("b.dat");
    
// количество уровней
$lines count ($file);
    
// запускаем цикл
for($i=0$i<$lines$i++){
    
// раскладываем уровни на элементы
list($a0$a1$a2) = explode ("::",$file[$i]);
    
// загоняем элементы в массив
    // $a0 - это имя участников
$array[$i] = array(price => $a0name => array($a0$a1$a2));
}
    
//сортируем массив
usort($arraypriceCmp);
    
//прогоняем отсортированный массив в цикле и выводим на печать
foreach ($array as $keys => $value){ 
foreach (
$value as $key => $val){ 
    
// если не массив, то печатаем переход на новую строку
if(!is_array($val)){ print "<br>\n"; continue;}
    
// если массив, то это уже отсортированные наши данные
foreach ($val as $v){ 
    
// печатаем данные
print $v." "
}

}
?>


Но есть вопрос, что делает в этом случае:

function priceCmp ( $a, $b ){
if ( $a[price] == $b[price] ) return 0;
if ( $a[price] < $b[price] ) return -1; return 1;}

return?

   
 
 автор: Blizard   (16.01.2008 в 14:29)   письмо автору
 
   для: vitali   (16.01.2008 в 14:10)
 

посмотрите тут http://omsk777.ru/all.php?act=sortarrr может быть поможет )

   
 
 автор: vitali   (16.01.2008 в 14:10)   письмо автору
 
   для: Maxam   (16.01.2008 в 12:20)
 

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

   

Сообщения:  [1-10]   [11-17] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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