Автор Тема: Сортировка массива  (Прочитано 11407 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Maxim

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 23
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.starwars.dax.ru
Сортировка массива
« : 04 Декабря 2002, 17:07:44 »
Имеется текстовый файл вида:

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

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

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

Как мне отсортировать строки в массиве $textfile, допустим по полю2, по возрастанию и убыванию?

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Сортировка массива
« Ответ #1 : 04 Декабря 2002, 17:13:31 »
usort

Оффлайн AlieN

  • Абыр!=)
  • Ветеран
  • *****
  • Сообщений: 1315
  • +0/-1
  • 2
    • Просмотр профиля
Сортировка массива
« Ответ #2 : 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;
}
usort ($textfile"super_sort");
echo 
"<pre>";
print_r($textfile);
echo 
"</pre>";

Код не проверял, но должен работать....
The Chemical Brothers - Hey Boy Hey Girl (User Friendly Mix)
Peter Presta pres - Set Sail(Peter Presta Apple Jaxx Dub) She S.Sunshine Feat Mila - Bring The Beat Back (Club Mix) Jerry Ropero - Home Alone (Dub Mix)

Оффлайн Maxim

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 23
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.starwars.dax.ru
Сортировка массива
« Ответ #3 : 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

  • Универсал
  • Старожил
  • ****
  • Сообщений: 456
  • +0/-0
  • 2
    • Просмотр профиля
    • http://myphp.dem.ru
Сортировка массива
« Ответ #4 : 06 Декабря 2002, 18:12:11 »
Замени split на explode
После трех дней без программирования жизнь становится бессмысленной.

Оффлайн Maxim

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 23
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.starwars.dax.ru
Сортировка массива
« Ответ #5 : 07 Декабря 2002, 09:45:47 »
Спасибо, все заработало

Оффлайн AlieN

  • Абыр!=)
  • Ветеран
  • *****
  • Сообщений: 1315
  • +0/-1
  • 2
    • Просмотр профиля
Сортировка массива
« Ответ #6 : 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;
}
usort ($textfile"super_sort");
echo 
"<pre>";
print_r($textfile);
echo 
"</pre>";
The Chemical Brothers - Hey Boy Hey Girl (User Friendly Mix)
Peter Presta pres - Set Sail(Peter Presta Apple Jaxx Dub) She S.Sunshine Feat Mila - Bring The Beat Back (Club Mix) Jerry Ropero - Home Alone (Dub Mix)

Оффлайн Maxim

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 23
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.starwars.dax.ru
Сортировка массива
« Ответ #7 : 11 Декабря 2002, 13:05:05 »
У меня появился еще вопрос по этой теме. В разных случая мне нужно сортировать разные поля. Можно ли функции super_sort еще передать какие-либо параметры? Или для каждого поля делать свою функцию super_sort?

Оффлайн GotZfild

  • Универсал
  • Старожил
  • ****
  • Сообщений: 456
  • +0/-0
  • 2
    • Просмотр профиля
    • http://myphp.dem.ru
Сортировка массива
« Ответ #8 : 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 
"<pre>";
print_r($textfile);
echo 
"</pre>";
После трех дней без программирования жизнь становится бессмысленной.

Оффлайн GotZfild

  • Универсал
  • Старожил
  • ****
  • Сообщений: 456
  • +0/-0
  • 2
    • Просмотр профиля
    • http://myphp.dem.ru
Сортировка массива
« Ответ #9 : 11 Декабря 2002, 20:01:36 »
RomikChef, может я вопрос не понял, но параметр указывается в $sort_by (в примере 1-е поле)
После трех дней без программирования жизнь становится бессмысленной.

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Сортировка массива
« Ответ #10 : 11 Декабря 2002, 20:03:51 »
Это я тормознул, приношу извинения.

Оффлайн Serge2k

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 7
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Сортировка массива
« Ответ #11 : 22 Декабря 2002, 13:35:49 »
Попробую также немного усложнить задачу, возвращаясь к первоначально заданному вопросу.
Мы отсортировали файл

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

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


Также хотелось бы спросить совета: нормально ли будет на такой основе работать рейтинг сайтов (100 сайтов с суммарной посещаемостью 2000 человек в день)? Или же для него лучше использовать MySQL - просто я абсолютно не знаю MySQL, и нет времени разбираться. Потому хотел бы использовать для рейтинга текстовый файл. И реально ли с помощью текстового файла делать счетчики для упомянутых 100 сайтов с графическими показателями посетителей/посещений, или лучше использовать счетчики на основе статичного изображения (хотя бы с точки зрения скорости)?
Create the Web!

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Сортировка массива
« Ответ #12 : 22 Декабря 2002, 14:11:50 »
Судя по всему, ты не только MySQL не знаешь - иначе не задавал бы этого вопроса :-)
Я думаю, при таких объемах лучше воспользоваться базой данных.

А сортировку по третьему полю сделать легко. Надо просто ПОНЯТЬ, что делает приведенный пример, а не по-обезьяньи скопировать.

Оффлайн Serge2k

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 7
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Сортировка массива
« Ответ #13 : 22 Декабря 2002, 15:50:52 »
Спасибо за информативный совет :-) А как насчет реализации рейтинга?
Create the Web!

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Сортировка массива
« Ответ #14 : 22 Декабря 2002, 16:04:25 »
http://faq.phpclub.net/newbie - работа с базой не так страшна, как кажется.

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28