-
Имеется текстовый файл вида:
поле1|поле2|поле3
поле1|поле2|поле3
поле1|поле2|поле3
Потом я заношу строки из файла в массив
$textfile=file("file.txt");
Как мне отсортировать строки в массиве $textfile, допустим по полю2, по возрастанию и убыванию?
-
usort
-
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 "
";
Код не проверял, но должен работать....
-
Что-то неправильно работает.
Вот такой текстовый файл:
поле3|3|поле3
поле2|2|поле2
поле1|1|поле1
отсортировался вот так:
Array
(
[0] => поле2|2|поле2
[1] => поле1|1|поле1
[2] => поле3|3|поле3
)
-
Замени split на explode
-
Спасибо, все заработало
-
хм....
я же поправил сообщение, вот так должно было быть:
$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 "
";
-
У меня появился еще вопрос по этой теме. В разных случая мне нужно сортировать разные поля. Можно ли функции super_sort еще передать какие-либо параметры? Или для каждого поля делать свою функцию super_sort?
-
Например так
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 "
";
-
RomikChef, может я вопрос не понял, но параметр указывается в $sort_by (в примере 1-е поле)
-
Это я тормознул, приношу извинения.
-
Попробую также немного усложнить задачу, возвращаясь к первоначально заданному вопросу.
Мы отсортировали файл
поле1|поле2|поле3
поле1|поле2|поле3
поле1|поле2|поле3
по второму полю. А что делать, если значения нескольких вторых полей совпадают, и тогда требуется сортировка между ними по третьему полю???
Также хотелось бы спросить совета: нормально ли будет на такой основе работать рейтинг сайтов (100 сайтов с суммарной посещаемостью 2000 человек в день)? Или же для него лучше использовать MySQL - просто я абсолютно не знаю MySQL, и нет времени разбираться. Потому хотел бы использовать для рейтинга текстовый файл. И реально ли с помощью текстового файла делать счетчики для упомянутых 100 сайтов с графическими показателями посетителей/посещений, или лучше использовать счетчики на основе статичного изображения (хотя бы с точки зрения скорости)?
-
Судя по всему, ты не только MySQL не знаешь - иначе не задавал бы этого вопроса :-)
Я думаю, при таких объемах лучше воспользоваться базой данных.
А сортировку по третьему полю сделать легко. Надо просто ПОНЯТЬ, что делает приведенный пример, а не по-обезьяньи скопировать.
-
Спасибо за информативный совет :-) А как насчет реализации рейтинга?
-
http://faq.phpclub.net/newbie - работа с базой не так страшна, как кажется.
-
[OFF]со временем ромик свой острый язык затупил....
так держать рома!!!!
[/OFF]