Forum Webscript.Ru

Программирование => PHP => Тема начата: Maxim от 04 Декабря 2002, 17:07:44

Название: Сортировка массива
Отправлено: Maxim от 04 Декабря 2002, 17:07:44
Имеется текстовый файл вида:

поле1|поле2|поле3
поле1|поле2|поле3
поле1|поле2|поле3

Потом я заношу строки из файла в массив

$textfile=file("file.txt");

Как мне отсортировать строки в массиве $textfile, допустим по полю2, по возрастанию и убыванию?
Название: Сортировка массива
Отправлено: Меняздесьдавнонет от 04 Декабря 2002, 17:13:31
usort
Название: Сортировка массива
Отправлено: AlieN от 04 Декабря 2002, 17:24:28
RomikChef
Ты как вседа многословен...
Maxim

$textfile=file("file.txt");
function super_sort($a, $b) {
    list($a1,$a2,$a3)=split("|",$a);
    list($b1,$b2,$b3)=split("|",$b);
    if ($a2 == $b2) return 0;
    return ($a2 > $b2) ? 1 : -1;
}
usort ($textfile, "super_sort");
echo "
";
print_r($textfile);
echo "
";

Код не проверял, но должен работать....
Название: Сортировка массива
Отправлено: Maxim от 06 Декабря 2002, 14:47:09
Что-то неправильно работает.

Вот такой текстовый файл:


поле3|3|поле3
поле2|2|поле2
поле1|1|поле1



отсортировался вот так:


Array
(
    [0] => поле2|2|поле2

    [1] => поле1|1|поле1

    [2] => поле3|3|поле3

)
Название: Сортировка массива
Отправлено: GotZfild от 06 Декабря 2002, 18:12:11
Замени split на explode
Название: Сортировка массива
Отправлено: Maxim от 07 Декабря 2002, 09:45:47
Спасибо, все заработало
Название: Сортировка массива
Отправлено: AlieN от 08 Декабря 2002, 17:52:22
хм....
я же поправил сообщение, вот так должно было быть:

$textfile=file("file.txt");
function super_sort($a, $b) {
    list($a1,$a2,$a3)=split("\\\\|",$a);
    list($b1,$b2,$b3)=split("\\\\|",$b);
    if ($a2 == $b2) return 0;
    return ($a2 > $b2) ? 1 : -1;
}
usort ($textfile, "super_sort");
echo "
";
print_r($textfile);
echo "
";
Название: Сортировка массива
Отправлено: Maxim от 11 Декабря 2002, 13:05:05
У меня появился еще вопрос по этой теме. В разных случая мне нужно сортировать разные поля. Можно ли функции super_sort еще передать какие-либо параметры? Или для каждого поля делать свою функцию super_sort?
Название: Сортировка массива
Отправлено: GotZfild от 11 Декабря 2002, 15:22:39
Например так

function super_sort($a, $b) {
    global $sort_by;
    $first = explode("|", $a);
    $second = explode("|", $b);
    if (is_numeric($second[$sort_by]) && is_numeric($first[$sort_by]))
        return $first[$sort_by] > $second[$sort_by];
    else
        return strcmp($first[$sort_by], $second[$sort_by]);
}
$sort_by = 0;
usort($textfile, "super_sort");
echo "
";
print_r($textfile);
echo "
";
Название: Сортировка массива
Отправлено: GotZfild от 11 Декабря 2002, 20:01:36
RomikChef, может я вопрос не понял, но параметр указывается в $sort_by (в примере 1-е поле)
Название: Сортировка массива
Отправлено: Меняздесьдавнонет от 11 Декабря 2002, 20:03:51
Это я тормознул, приношу извинения.
Название: Сортировка массива
Отправлено: Serge2k от 22 Декабря 2002, 13:35:49
Попробую также немного усложнить задачу, возвращаясь к первоначально заданному вопросу.
Мы отсортировали файл

поле1|поле2|поле3
поле1|поле2|поле3
поле1|поле2|поле3

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


Также хотелось бы спросить совета: нормально ли будет на такой основе работать рейтинг сайтов (100 сайтов с суммарной посещаемостью 2000 человек в день)? Или же для него лучше использовать MySQL - просто я абсолютно не знаю MySQL, и нет времени разбираться. Потому хотел бы использовать для рейтинга текстовый файл. И реально ли с помощью текстового файла делать счетчики для упомянутых 100 сайтов с графическими показателями посетителей/посещений, или лучше использовать счетчики на основе статичного изображения (хотя бы с точки зрения скорости)?
Название: Сортировка массива
Отправлено: Меняздесьдавнонет от 22 Декабря 2002, 14:11:50
Судя по всему, ты не только MySQL не знаешь - иначе не задавал бы этого вопроса :-)
Я думаю, при таких объемах лучше воспользоваться базой данных.

А сортировку по третьему полю сделать легко. Надо просто ПОНЯТЬ, что делает приведенный пример, а не по-обезьяньи скопировать.
Название: Сортировка массива
Отправлено: Serge2k от 22 Декабря 2002, 15:50:52
Спасибо за информативный совет :-) А как насчет реализации рейтинга?
Название: Сортировка массива
Отправлено: Меняздесьдавнонет от 22 Декабря 2002, 16:04:25
http://faq.phpclub.net/newbie - работа с базой не так страшна, как кажется.
Название: Сортировка массива
Отправлено: AlieN от 23 Декабря 2002, 16:11:58
[OFF]со временем ромик свой острый язык затупил....
так держать рома!!!!
[/OFF]