Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » Быстрая сортировка текста

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

Skandalli



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте. Помогите пожалуйста. Пытаюсь реализовать быструю сортировку текста в массиве.  
 

Код:
$arra = Array(
                    "0" => Array(
                        "name" => "error.txt",
                        "size" => 200,
                        "type" => "dfe",
                        "mod" => 1392502979
                    ),
                    "1" => Array(
                        "name" => "gifs_03_yapfiles.ru.gif",
                        "size" => 4282106,
                        "type" => "abc",
                        "mod" => 1394738534,
                    ),
                    "2" => Array (
                        "name" => "readme.txt",
                        "size" => 1,
                        "type" => "ytr",
                        "mod" => 1391309100
                    ),
                    "3" => Array (
                        "name" => "readme.txt",
                        "size" => 1,
                        "type" => "qqq",
                        "mod" => 1391309100
                    )
                );

За образец взял этот код
и написал код. Если Количество элементов в массиве 3 - все хорошо. Если их больше 3 (в данном случае 4) - тупо белый лист в браузере. Что я делаю не так? Может вообще подход не тот?
 

Код:
<?PHP
$start = microtime(true);
ini_set('memory_limit', '555M');
 $arra = Array(
                    "0" => Array(
                        "name" => "error.txt",
                        "size" => 200,
                        "type" => "dfe",
                        "mod" => 1392502979
                    ),
                    "1" => Array(
                        "name" => "gifs_03_yapfiles.ru.gif",
                        "size" => 4282106,
                        "type" => "abc",
                        "mod" => 1394738534,
                    ),
                    "2" => Array (
                        "name" => "readme.txt",
                        "size" => 1,
                        "type" => "ytr",
                        "mod" => 1391309100
                    ),
                    "3" => Array (
                        "name" => "readme.txt",
                        "size" => 1,
                        "type" => "qqq",
                        "mod" => 1391309100
                    )
                );
function ascii($array, $i, $base, $att){
        $cnt = min((strlen($array[$i][$att])), strlen($array[$base][$att]));
    $ord = '';
    for($k = 0; $k < $cnt; $k++){
        $int = ord($array[$i][$att][$k]);
        $ord .= $int;
    }
    return (int)$ord;
}
function quicksort (&$array, $att, $l=0, $r=0) {
        if($r === 0) $r = count($array)-1;
        $i = $l;
        $base = 1;
        $j = $r;  
        do {
            while (ascii($array, $i, $base, $att) < ascii($array, $base,$base, $att)) $i++;
            while (ascii($array, $j, $base, $att) > ascii($array, $base, $base, $att)) $j--;
            if ($i <= $j) {
                if (ascii($array, $i, $base, $att) > ascii($array, $j, $base, $att)) list($array[$i], $array[$j]) = array($array[$j], $array[$i]);
                    $i++;
                    $j--;
            }
        }while ($i <= $j);
        if ($i < $r) quicksort ($array, $att, $i, $r);
        if ($j > $l) quicksort ($array, $att, $l, $j);
 
}
 
$a = "type";
$s = $arra;
quicksort($s, $a);
$d=  $s;
print_r($s);
$time = microtime(true) - $start;
printf('Скрипт выполнялся %.4F сек.', $time);
?>

Всего записей: 365 | Зарегистр. 30-09-2009 | Отправлено: 01:32 07-04-2014
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
тупо белый лист в браузере. Что я делаю не так?

включите отображение ошибок и посмотрите
 

Цитата:
Может вообще подход не тот?  

возможно не тот, вы же не упомянули алгоритм сортировки
 
если по полю, то чем вам родные функции сортировки не нравятся?
 
ps: и упоминайте язык в названии
 

Код:
<?php
$arra = Array(  
 "0" => Array(  
  "name" => "error.txt",  
  "size" => 200,  
  "type" => "dfe",  
  "mod" => 1392502979  
 ),  
 "1" => Array(  
  "name" => "gifs_03_yapfiles.ru.gif",  
  "size" => 4282106,  
  "type" => "abc",  
  "mod" => 1394738534,  
 ),  
 "2" => Array (  
  "name" => "readme.txt",  
  "size" => 1,  
  "type" => "ytr",  
  "mod" => 1391309100  
 ),  
 "3" => Array (  
  "name" => "readme.txt",  
  "size" => 1,  
  "type" => "qqq",  
  "mod" => 1391309100  
 )  
);
 
 
function sortBy(&$ar, $by)
{
    usort($ar, function($a, $b) use($by){
       if (isset($a[$by]) && isset($b[$by]))
       {
         if ($a[$by] == $b[$by]) return 0;
         return ($a[$by] > $b[$by]) ? +1 : -1;  
       }
       return 0;    
    });
}  
 
 
sortBy($arra, 'type');
 
var_dump($arra);


----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 01:34 07-04-2014 | Исправлено: Cheery, 01:49 07-04-2014
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Интернет » Web-программирование » Быстрая сортировка текста


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru