Forum Webscript.Ru
Программирование => PHP => Тема начата: xax от 10 Февраля 2004, 00:27:05
-
Есть код:
// Эта функция должна сравнивать значения $f1 и $f2 и возвращать:
// -1, если $f1<$f2,
// 0, если $f1==$f2
// 1, если $f1>$f2
// Под < и > понимаем следование этих имен в выводимом списке
function FCmp($f1,$f2)
{ // Каталог всегда предшествует файлу
if(is_dir($f1) && !is_dir($f2)) return -1;
// Файл всегда идет после каталога
if(!is_dir($f1) && is_dir($f2)) return 1;
// Иначе сравниваем лексиграфически
if($f1<$f2) return -1; elseif($f1>$f2) return 1; else return 0;
}
// Пусть $Files содержит массив с ключами - именами файлов
// в текущем каталоге. Отсортируем его.
uksort($Files,"FCmp"); //передаем функцию сортировки "по ссылке"
Впрос мой таков, я не как не могу догадаться, как сделать так, чтобы вместо операторов $f1 и $f2, был одн оператор - из массива (Второй столбик) - у меня он называется $str_arr[1] (Вроде он так всегда называется), который выводит столбик из массива.
На всякий случай, мне нужно отсортировать этот столбик по алфавиту.
-
Ээх, да же не помогут
-
а чего тогда пишешь? :-)
-
Ну, хех, мне просто очень надо, я можно сказать мучаюсь с этим две недели, купил две книги, н никак я не могу придумать, как мне отсортировать этот массив, я так пробовал и сяк, максимально мне удавалось добиться сртировки первого слова по алфавиту из массива!
Вобщем Ром если можешь помоги, или хоть линк подскажи, где ещё, кроме манулала, можно почитать, или подкинь идею!
-
sort($Files);
-
а поподробнее
-
беда в том, что ты не понимаешь смысла и механизма работы этой функции.
а еще в том, что она тебе не нужна :-)
а еще в том, что форум плохо показывает новые сообщения.
я это пропустил
-
подробнее - вставб эту строчку в суой скрипт вместо всей своей тряхомудии
-
Я понимаю, но не всё, вот в этом и есть проблемма!
Я могу сделать список из слов в самом документе, и его отсортировать, но вот массив - я не могу придумать никак!
Есть конечно звращённая идея - сделать вывод чётных и нчётных строк по отдельности и обе их по очереди сортировать, но это сам понимаешь - ужас!
Подай идею или дай ссылки! Плиз!
-
погоди.
что такое "второй столбик"?
ты можешь внятно объяснить, что это за массив?
-
Да! Массив - этотекстовый файл в котором кадая строка это информация об отдельной игре, отделяются столбики ;
во втором столбике названия игр!
-
горе ты мое
столбики...
-
Это не столбики? Или это нельзя отсортировать?
-
тебе объяснить, или готовый код дать?
-
Лучше и то и другое!
-
ну, это будет жирно.
$f1 и $f2 - это строки твоего массива.
функция usort по очереди передает их функции cmp, для того, чтобы узнать, какая больше, а какая меньше
короче, тебе на эту тему заморачиваться не надо
а вот в функции cmp ты должен сравнивать переданные строки, выяснять, какая больше, и возврящать результат.
понятно?
вот в функции cmp тебе и нужны будут твои
$str_arr[1]
получаешь их от $f1 и от $f2 и сравниваешь, кк в примере к usort написано.
-
Я не совсем понял, но вот как понял
$file="news/news.txt";
$arr=file($file);
for ($i=0;$i<=count($arr)-1;$i++) {
$str=explode(";",$arr[$i]);
function Cmp($str[0],$str[0])
{
if(is_dir($str[0]) && !is_dir($str[0])) return -1;
if(!is_dir($str[0]) && is_dir($str[0])) return 1;
if($f1<$f2) return -1; elseif($str[0]>$str[0]) return 1; else return 0;
}
uksort($Files,"Cmp");
while (list($key, $value) = each($str[0])) {
echo "$key: $value\\n";
}
?>
$str[0] я заменил, так как этот оператор выводит весь список столбца!
Зы пишет, что ошибка на 6 строчке!
-
не, я пас.
может, найдется добрая душа...
-
один тебе совет напоследок.
прежде, чем добавлять новые фичи в свой код (например, сортировку)
ПОЙМИ, ЧТО ДЕЛАЕТ ТОТ КОД, КОТОРЫЙ У ТЕБЯ УЖЕ ЕСТЬ!
-
Блин, Ром, ненадо прям сразу - я пас, я, вроде, понимаю, что делает мой код
Вроде так
$file="news/news.txt"; (Тут пишем адрес массива из которого беруться данные)
$arr=file($file); (Показываем что есть arr)
for ($i=0;$i<=count($arr)-1;$i++) { (Это отвечает за то, что нам будет выводиться при адрес?i=число)
$str=explode(";",$arr[$i]);
Ром ну помоги
-
или ты про другой?
А ты мне привёл примр, где надо прописывать каждую строку в скрипт, а что делать если у тебя 100 - 1000
строк?
-
Показываем что есть arr
кому показываем?
что показываем?
зачем показываем?
Это отвечает за то, что нам будет выводиться при адрес?i=число
ЭТО у нас ВЫВОДИТ твой долбаный массив!
а это значит, что сортировать надо ДО ЭТОГО!
-
Следовательно так?:
$file="news/news.txt";
$arr=file($file);
function cmp($a, $b)
{
if ($a == $b) {
return 0;
}
return ($a < $b) ? -1 : 1;
}
$a = array($str[0], $str[0]);
usort($a, "cmp");
while (list($key, $value) = each($a)) {
echo "$key: $value\\n";
}
?>
-
тебе надо ВНУТРИ функции cmp делать explode а и б!
и сравнивать $str[1] от них
-
Можно в этом моменте по - подробнее?
-
усортом тебе надо сортировать твой массив со строчками, чудило, а не это аааааа.
ни хрена ты не понимаешь вообще, что ты делаешь.
вот, выясни сначала
-
сначала это ты мне поподробнее рассказешь, что делает твой код безо всякой сортировки.
-
Щас уже - да!
Можешь написать в виде части кода, что ты имеешь ввиду
-
ну, раз можешь - так давай, рассказывай.
-
А что именно рассказать?
Зачем мне или что делает скрипт с точки зрения пхп?
-
что делаешь ты, ставя ту или иную команду ПХП.
Поскольку ты совершенно не понимаешь, в каком месте тебе надо делать explode при сравнении, я делаю вывод, что ты не понимаешь что оно делает в твоем скрипте
-
только не думай, что ты отделаешься одним эксплодом.
опиши всю программу построчно.
Поверь, я не издеваюсь.
Но видеть, как ты с осмысленностью обезьяны переставляешь кусочки кода, как картинки в паззле - у меня сердце кровью обливается.
Давай, мы потратим немного времени, но ты будешь понимать, что делает каждая строчка твоей программи, и если тебе понадобится сортировка, ты будешь знать, куда ее впендюрить
-
ок
Следовательно так?:
$file="news/news.txt"; //Ссылка на массив
$arr=file($file); //$arr - берётся из данного массива
function cmp($a, $b) //Не уверен, сравнивает оператор а и б
{
if ($a == $b) { //Если они равны по значению (по буквам)
return 0; //То выводятся одинаково
}
return ($a < $b) ? -1 : 1; //Если а выше по алфавиту, то она выше б
}
$a = array($str[0], $str[0]); //Создаёт массив (Вроде)
usort($a, "cmp"); //Сортирует
while (list($key, $value) = each($a)) { //не знаю
echo "$key: $value\\n"; //Выводит
}
?>
-
у тебя был не этот.
этот - просто бред сивой кобылы.
ты уж лучше свой старый распиши.
там хоть только комментарии фантастические будут, а здесь - и код и твои объяснения.
$file="news/news.txt"; //Ссылка на массив
супер.
объясни мне, где здесь массив, и где - ссылка.
И, заодно - слышал ли ты что-нибудь о переменных?
$arr=file($file); //$arr - берётся из данного массива
что берется?
точно ли, из массива?
а не приходилось ли тебе когда-нибудь слышать такое слово - файл?
Создаёт массив (Вроде)
ЗАЧЕМ?
-
Да о перемнных слышал, о файлах тоже!
Про массив я сказал, что не уверен!
А про старый там и так есть комментарии, что там ещё написать?
-
Есть код:
// Эта функция должна сравнивать значения $f1 и $f2 и возвращать:
// -1, если $f1<$f2,
// 0, если $f1==$f2
// 1, если $f1>$f2
// Под < и > понимаем следование этих имен в выводимом списке
function FCmp($f1,$f2)
{ // Каталог всегда предшествует файлу
if(is_dir($f1) && !is_dir($f2)) return -1;
// Файл всегда идет после каталога
if(!is_dir($f1) && is_dir($f2)) return 1;
// Иначе сравниваем лексиграфически
if($f1<$f2) return -1; elseif($f1>$f2) return 1; else return 0;
}
// Пусть $Files содержит массив с ключами - именами файлов |Т У Т ВОПРОС имеется ввиду, что $Files должен содеражть массив - это ссылка на файл с массивом? И выглядеть это должно так $Files="news/news.txt";
// в текущем каталоге. Отсортируем его.
uksort($Files,"FCmp"); //передаем функцию сортировки "по ссылке"
-
а теперь мои комментарии
объясняем парсеру ПХП, что хтмл кончился, и дальше идет пхп.
$file="news/news.txt";
ПЕРЕМЕННОЙ с именем $file присваиваем значение news/news.txt
переменная типа "строка".
$arr=file($file);
переменной с именем $arr присваивается результат работы функции file
результатом является переменная типа "массив", который получается при чтении файла, имя которого содержится в переменной $file
массив - переменная из переменных.
массив состояит из ячеек, в которых лежат переменные.
как бутылки в ящике.
ты можешь вытащить любую бутылку, можешь перебрать их по очереди.
так и с переменными в массиве.
в твоем массиве лежат строки из файла.
-
RomikChef:
А про старый там и так есть комментарии, что там ещё написать?
ну, раз там есть комментарии, то тебе ничего не стоит адаптировать этот код под себя - правда? :-)
-
А мне нужны столбики из файла? Если да, то как это реализовать?
Вроде str полностью этому удовлетворяет?
-
у тебя не столбики, а строки.
завтра продолжим учиться
Хотя нет.
ты так и не привел кода, который без этих всех ужасоы выводит тебе твои столбики безо всякой сортировки.
пока его не будет - не начнем.
как можно сортирровать то чего нет?
-
Так!
$file="news/news.txt";
$arr=file($file);
for ($i=0;$i<=count($arr)-1;$i++) {
$str=explode(";",$arr[$i]);
$menu.="$str[0]
";
}
echo $menu;
?>
-
рассказывай.
что делает этот код.
ты уже достаточно подкован.
-
$file="news/news.txt"; //Переменная бурещая данные из файла
$arr=file($file); //Переменная arr берётся из файла
for ($i=0;$i<=count($arr)-1;$i++) { //Вывод массива
$str=explode(";",$arr[$i]); //Тут описываем откуда берётся столбик
$menu.="$str[0]
"; //Пишем, что выводит переменная мену!
}
echo $menu; //Выводим мену!
-
1 неправильно.
2. сойдет.
3. сойдет
4. бред. ничего мы никому не описываем. читай документацию на explode
-
1 - я не понял, что не правильно
4 Я неправильн выразился там описывается, что в строке всё разделяется через ;!
-
значит, ты хорошо понимаешь, что делалет этот код?
Вопросов у тебя нету?
отлично.
тебе надо добавить функцию сортировки.
вот добавь.
пусть неправильную.
куда ты ее добавишь?
-
Есть один во прос - что тут не так?
$file="news/news.txt";
Вот код
$file="news/news.txt";
$arr=file($file);
function cmp($a, $b) //Не уверен, сравнивает оператор а и б
{
if ($a == $b) { //Если они равны по значению (по буквам)
return 0; //То выводятся одинаково
}
return ($a < $b) ? -1 : 1; //Если а выше по алфавиту, то она выше б
}
$a = array($str[0], $str[0]); //Создаёт массив (Вроде)
usort($a, "cmp"); //Сортирует
for ($i=0;$i<=count($arr)-1;$i++) {
$str=explode(";",$arr[$i]);
$menu.="$str[0]
";
}
while (list($key, $value) = each($a)) { //не знаю
echo "$key: $value\\n"; //Выводит
?>
-
не так то,что ты абсолютно не понимаешь, что ты делаешь.
в этом вся беда.
-
Ну блин, а как - онимаешь, я не совсем понимаю, что нужно делать с кодом сортировки!
-
Если можешь, объясни плиз!
-
неправда.
ты не понимаешь не то, что нужно делать с кодом сортировки, а вообще не понимаешь, что делаешь.
скажи мне - что тебе надо отсортировать.
вот в этом скрипте?
не "игры" или "столбцы", а вот в этом скрипте - что надо отсортировать?
ты даже этого не понимаешь.
причем, даже моих объяснений не понимаешь.
я не говорю, что они идеальны, но мое мнение - что ты безнадежен.
-
Сравнить $a и $b (Я сам код сортировки не правил, я думал ты хочешь, чтобы я тебе показал куда я его встявлю)
Вот он их и сортирует, ну а так как они ничему не равны, то и сортировать нечего!
-
я устраняюсь.
для того, чтобы ты понимал, что ты делаешь, тебе надо объяснять понятия "файл", "переменная", "массив", самые основы программирвоания.
Большинство людей, берущихся за РНР, эти вещи худо-бедно понимают.
тебе же это недоступно.
задача бесполезна.
я тебя не спрашивал, что надо сравнивать. ты бредишь. ты вообще не понимаешь, к чему ты написал это "сравнить".
я тебя спросил
ЧТО ТЕБЕ НАДО СОРТИРОВАТЬ?
а ты мне что ответил?
по-моему, до тебя даже смысл слова "сортировка" не доходит
-
Ну не надо прям сразу так устранятся!
Я вроде худо - бедно понимаю эти вещи!
Помоги!
-
повторяю, для тупых.
я тебя спрашивал - что тебе надо сортировать в твоем, ПЕРВОНАЧАЛЬНОМ СКРИПТЕ!
вот в этомxax:
$file="news/news.txt";
$arr=file($file);
for ($i=0;$i<=count($arr)-1;$i++) {
$str=explode(";",$arr[$i]);
$menu.="$str[0]
";
}
echo $menu;
в этом!!!
без добавок того идиотического бреда, который ты туда впихиваешь!
в этом, который имеет хоть какой-то смысл!
-
Давай упростим
Вот до чего я пока дошёл!
$file="news/news.txt";
$arr=file($file);
for ($i=0;$i<=count($arr)-1;$i++) {
$str=explode(";",$arr[$i]);
$a=array($file);
asort($a);
foreach($a as $str) echo "$str
";
}
?>
-
сОРТИРОВАТЬ НАДО $str[0]
-
это ты не упростил, а усложнил.
повторяю свой вопрос.
тебе не кажется он ключевым?
если тебе надо что-то отсортировать, то надо сначала ЗНАТЬ - ЧТО ИМЕННО, буратина ты деревянная!!!
А не действовать как обезьяна - АБСОЛЮТНО БЕССМЫСЛЕННО впихивать в еод новые куски, не понимая - для чего.
-
Сортировать $str[0]
-
сОРТИРОВАТЬ НАДО $str[0]
ответ неверный.
-
$file - если не это, то тогда я, наверное, мало чего понимаю!
-
xax, а может с алгоритма начнешь?
Вот так прямо в лоб :
1. У меня есть файл news.txt
2. Он состоит из строк
3. Каждая строка состоит из двух частей разделенных символом ";"
4. Мне нужно прочитать этот файл в массив и вывести массив в браузер (еще куда нибудь)
5. Перед выводом этот массив надо отсортировать ....
и т.д.
-
Mog. Да это уже я думаю все поняли, я просто так чётко не смог выразить!
-
попробуй четко выразить правила сортировки, что тебе нужно.
-
Нужно выделить столбик и каждую строчку отсортировать относительно другой по алфавиту!
-
нет, не $file
xax:
то тогда я, наверное, мало чего понимаю!
об этом я тебе и толкую
в этом-то вся беда.
-
Я щас подумаю
-
Вот так
$a=array("a"=>"Zero","b"=>"world","c"=>"Alan","d"=>"Tsabu");
Тут мы сотрируем по ключам! так?
-
во-первых, где ты набрался таких слов - сортируем по ключам?
во-вторых, если ты не будешь употреблять слов, смысла которых ты не понимаешь, то будет лучше для всех.
в-третьих, я тебя спросил, что в ТВОЕМ скрипте надо отсортировать.
но у тебя даже с пониманием простых русских слов большие проблемы.
-
Массив
-
какой массив?
-
Который создаётся из файла!
-
ну вот. что и требовалось доказать.с трех попыток ты не смог верно ответить на вопрос.
для тебя алгоритм, описанный могом, и код, который ты где-то стырил, - совершенно не пересекаются.
потому, что конкретный кусок кода ты вставить не можушь.
все, гудляй.
купи себе книжку по пхп.
-
Так я тут с 3 книжками сижу!
И ну буь немного терпимее!
-
Так правильно?
$file="news/news.txt";
$arr=file($file);
function cmp($a, $b)
{
return strcmp($a["fruit"], $b["fruit"]);
}
$strq[]["fruit"] = "abs";
$strq[]["fruit"] = "apples";
$strq[]["fruit"] = "grapes";
usort($str, "cmp");
for ($i=0;$i<=count($arr)-1;$i++) {
$str=explode(";",$arr[$i]);
while (list($key, $value) = each($strq)) {
echo "\\$strq[$key]: " . $value["fruit"];
}
}
?>
-
[OFF]Мля![/OFF]
xax Дай пример (кусок файла, как он есть и каким ты его хочешь видеть после сортировки)
-
Mog. не надо ему пихать слюнявчик.
я все равно сотру.
это все равно, что ребенку пистолет давать. столько же смысла.
не отбирай кусок хлеба у человека, который должен сидеть на месте этого хаха.
-
RomikChef! Я вовсе не собираюсь писать за хах\'а скрипты (если ты об этом, говоря про слюнявчик). Просто хочу помочь разобраться человеку. Может будет толк.
-
Вот код
$file="news/news.txt";
$arr=file($file);
for ($i=0;$i<=count($arr)-1;$i++) {
$str=explode(";",$arr[$i]);
$menu.="$str[0]
";
$a.="$str[0]
";
$time = Date("h:i:M:d:y");
}
echo $menu;
?>
А хочу я видеть, чтобы $str[0] выводилось по алфавиту
-
Mog.
попробуй.
структура строки такая
some text 1;other text1...
some text 2;other text2...
some text 3;other text3...
соответственно,
сортировать надо по other text
-
Да структура такая
-
Ром, может ты всё - таки поможешь тоже?
-
смени структуру файла.
поменяй свои столбцы местами.
выводить тебе все равно какой - первый или второй, а сортировать тогда тебе и встроенная функция sort отсортирует.
ОДНА! одна функция. одна строчка к программе добавится! Только одна! а не куча всякой лабуды, которую ты впихиваешь, не понимая смысла
ну, и вывод придется поменять.
но ты уж, надеюсь, хоть справишься.
тебе надо отсортировать массив, полученый из файла, массив, который ты потом выводишь.
у тебя и массив есть, и вывод есть.
а ты херню всякуюпихаешь - и массив новый создаешь, и вывод какой-то уродский впихиваешь.
-
Просто sort($file); ?
-
Просто sort($file);
-
а потом как он это выведет в эхо?
Не надо?
while (list($value) = each($file)) {
echo "$value";
}
-
какой $file?????????????????
ТОРМОЗ!
ты так ни хера и не понял, что делает твоя программа
-
RomikChef:
а потом как он это выведет в эхо?
придурок, у тебя вывод в эхо УЖЕ ЕСТЬ.
-
Вобщем я разобрался, пока правда, на упрощённой модели сего кода:
$a = array(d, a, g, c, p);
asort($a);
while (list($key, $value) = each($a)) {
echo "$value";
}
?>
-
Выдаёт мне, что Warning: sort() expects parameter 1 to be array, string given in E:\\Program Files\\Apache Group\\Apache2\\Index\\Hi1\\spisok.php on line 4
-
Ром, вобщем вот так работает
$file="news/news.txt";
$arr=file($file);
for ($i=0;$i<=count($arr)-1;$i++) {
$str=explode(";",$arr[$i]);
sort($str);
$menu.="$str[0]
";
}
echo $menu;
?>
Но выводит только 2 строчки из столбика!
-
Вернее так
$file="news/news.txt";
$arr=file($file);
for ($i=0;$i<=count($arr)-1;$i++) {
$str=explode(";",$arr[$i]);
sort($arr);
$menu.="$str[0]
";
}
echo $menu;
?>
-
Если кому нужно, то вот код, которого я так долго добивался
$file="news/news.txt";
$arr=file($file);
sort($arr);
for ($i=0;$i<=count($arr)-1;$i++) {
$str=explode(";",$arr[$i]);
$menu.="$str[0]
";
}
echo $menu;
?>
правда есть одно но, и оно большое, код портит ссылки на строки: если у вас выводится по алфавиту, то ссылки выводятся неправильно!
-
а ты там, куда ссылка ведет, тоже сортируй.
-
Что ты имеешь ввиду?
-
Расскажи по - подробнее, как сортировать ссылки!
-
ссылки ортировать не надо.
там, куда ведет эта ссылка, тоже sort сделай, чудик
-
Спасибо, всё работает