Forum Webscript.Ru
Программирование => PHP => Тема начата: xax от 16 Февраля 2004, 22:29:05
-
Я сделал сортировку по алфавиту 1 столбика массива!
Потом написал код, чтобы на странице на букву а выводились все слова на а из второго столбика, а вот как объединить так, чтобы при выводе игр на а по алфавиту если:
Вывод страниц на букву
$file="news/news.txt";
$arr=file($file);
// sort($arr);
foreach ($arr as $a=>$b) {
$now=explode(";", $arr[$a]);
$news[$a]=$now[1];
}
foreach ($news as $a=>$b) {
$first=$news[$a]{0};
$first=strtolower($first);
if ($first=="$word") {
$file="news/news.txt";
$arr=file($file);
$str="$arr[$a]";
$str_arr=explode(";", $str);
echo "$str_arr[0]
";
}
}
if (!$str_arr) echo "Игр на эту букву нету";
?>
Код вывода по алфавиту
$file="news/news.txt";
$arr=file($file);
for ($i=0;$i<=count($arr)-1;$i++) {
$str=explode(";",$arr[$i]);
$menu.="$str[0]
";
sort($arr);
}
echo $menu;
?>
Задача: Нужно сделать так, чтобы выводимое id ссылки соответствовало той строчке из которой ьерётся сортируемое слово!
-
подайте убогому, кто-нибудь.
у меня уже сил нет.
-
RomikChef
Блин Ром, не надо оскарБлять, убогий, ну хех все мы начинали
-
Я хочу понять, а не чтоб мне код написали!
-
xax
[off]для начала весь php-код оформи тегами [ php ] ... [/ php ] (без пробелов). А то неудобно читать. [/off]
-
Макс
хм, странно, по моему наоборот сложнее!
-
xax
уж тебе-то должно быть все равно.
ты ведь не понимаешь ни одной строчки в этом коде
-
RomikChef В каком из?
-
xax
Начну с начала
1. Покажи хотя бы 3 строчки файла news.txt как они в нем есть
2. Покажи эти же 3 строчки, как тебе хотелось бы их видеть.
-
Mog. ему не строчки надо видеть.
перечитай вопрос
-
RomikChef:
ему не строчки надо видеть
Это мне строчки надо видеть. Потому, что
вопрос
-то я и не понял.
-
смотри.
он хочет вывести список строк из файла, со ссылками на редактирование.
до того, как он сортировал этот список, у него все совпадало.
номера строк.
вывел ссылку номер ноль - и в файле это строка первая.
но потом он захотел выводить, сортируя.
и у него совпадать перестало.
я считаю, что здесь поможет только паталогоанатом.
-
RomikChef:
редактирование
редактирование чего?
RomikChef:
до того, как он сортировал этот список, у него все совпадало.
В смысле НЕ сортировал?
[off]Гы! RomikChef, а ты откуда знаешь, что он хочет:)[/off]
-
да тут все на ладони.
из логики скрипта.
пока НЕ сортировал - совпадало.
-
xax
Слушай, может выучишь SQL хотя бы на элементарном уровне и начнешь использовать базу данных?
Потому что извращаться с подобной сортировкой я бы на твоём месте не начинал.
Нет, безусловно, реализовать это возможно, но ты просто не поймешь, как оно работает. Да и Ромик готовый код опубликовать для тебя не даст :)
-
FreeSpace
все я дам.
а советовать ему изучать SQL - это все равно, что советовать изучать интегралы человеку, не знающему таблицу умножения.
ему все равно, что учить он пока не знает даже пхп.
самостоятельно он НИ СТРОЧКИ написать не может.
Зачем ему Sql, если он не знает пхп?
-
RomikChef Не прав, я сам написал, форму забивки данных!
Кстати, для интеграллов таблица умножения не нужна :)
Собственно говоря, код это хорошо, но мне нужно и понять, что и как в нём, так как мне выучить пхп надо, да и интересно
Если кто может, то помогите
Кстати, я бы и sql учил, но когда начал читать статьи по этой байде, нифига не понял!
-
xax
а что такое интеграллы?
-
Xander Интегралл, это обратное действие взятия производной, интеграл от f(x)dx=F(x)
Лучше бы помог, чем глупости спрашивать
-
Подскажите, хоть, где менять надо и какие фуенкции использовать
-
Информация для размышления (по поводу сортировок)
$file="news/news.txt";
$arr=file($file);
echo "Несортированный
";
foreach ($arr as $a=>$b) {
echo "$a -> $b
";
}
echo "
";
asort($arr);
echo "Сортированный функцией asort
";
foreach ($arr as $a=>$b) {
echo "$a -> $b
";
}
echo "
";
?>
-
Mog. Тут есть странност, например если в базе 5 строчек, то строк выводится 7, но последние три -
6 ->
7 ->
8 ->
Ты не совсем понял:
Нужно так, чтобы выводилось в отсортированном виде ссылки на другой php файл, но так, чтобы в нём (В другом файле) ничего не менять!
Или нужно как - то состыковать с
$file="news/news.txt";
$arr=file($file);
foreach ($arr as $a=>$b) {
$now=explode(";", $arr[$a]);
$news[$a]=$now[1];
}
foreach ($news as $a=>$b) {
$first=$news[$a]{0};
$first=strtolower($first);
if ($first=="$word") {
$file="news/news.txt";
$arr=file($file);
$str="$arr[$a]";
$str_arr=explode(";", $str);
echo "$str_arr[1]
";
}
}
if (!$str_arr) echo "Íîâîñòåé íà ýòó áóêâó íåò";
?>
Код выводит на каждой странице второй столбик по букве, тоесть адрес?word=a, то выводятся все строчки в которых во втором столбике слово начинается на "a"
-
xax
Ты не совсем понял
Я совсем не понял, что нужно.
Я напишу чего я понял, а ты поправь.
1. У тебя есть файл состоящий из отдельных строк
2. Каждая строка состоит из двух частей разделенных символом ";"
3. Необходимо прочитать файл в массив построчно
4. Необходимо отсортировать массив по второй части строки
5. При сортировке необходимо сохранять связь между строкой в массиве и местоположением строки в файле
6. После сортировки из этого массива необходимо выбрать строки, вторая часть которых начинается на букву $word
7. Выбранные строки(или их первую/вторую часть) показать в виде ссылок с параметром определяющим местоположение строк в файле
Y/N
-
Mog. Да ты полностью прав, только под буквой $word ты имел ввиду, что в адресной строке в зависимости от того чему равен этот ператор, такую страницу он и будет нам выдовать или нет,
а так полностью верно
-
Ok!
Попробуем набросать код с комментариями, согласно сформулированным требованиям.
Сразу хочу оговориться, что я не адепт и не ас РНР. Чайник, так скажем-с.
Потому оптимизацией здесь даже пахнуть не будет :)
Дабы не распылять код на мелкие скрипты, сваливать все будем в один.
Поехали.
//Начнем с анализа ситуации, т.е. с проверки пришеждших параметров
//Да! Предполагается, что register_gloabls=On и скрипт называется sort.php
//Случай первый, скрипт запущен без параметров, $word, естественно, отсутствует
if (!$word){
//Создаем массив из букв
$ar=array("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z");
//пишем инструкцию для юзера
echo "Выбери нужную букву
";
echo "| ";
foreach ($ar as $a) {//перебираем массив по значениям
//и пытаемся красиво его "нарисовать"
echo " $a | ";
}
}
//Случай второй, буква выбрана, $word присутствует
if($word){
$file="news/news.txt";//Задаем имя файла
$arr=file($file);//читаем его построчно в массив
//Нижеследующее действие меняет местами части строк для сортировки строк по второй части
//Тебе, кстати, давали совет поменять изначально эти части местами при создании файла news.txt
//Могу только присоединиться к этому пожеланию
foreach ($arr as $a=>$b) {
$now=explode(";", $b);
$new_arr[$a]=$now[1].";".$now[0];
}
//Теперь массив готов к сортировке, вторая часть строки стала первой,
//ну мы его и сортируем по значениям(строкам), сохраняя связь между ними и
//ключами(которые суть - номер строки в файле)
asort($new_arr);
//Теперь выбираем из массива то, что нам нужно, руководствуясь первой буквой
//"бывшего второго" (а ныне первого) "столбика" и параметром $word
foreach ($new_arr as $a=>$b) {
$first=$b{0};
$first=strtolower($first);
if ($first=="$word") {
$str_arr=explode(";", $b);
//и печатаем первую часть строки (не забывая, что в файле она
//соответствует второй части), при этом параметр n однозначно определяет
//местоположение строки в файле (к чему и стремились)
//Лирическое отступление
//Если нужно печатать другую часть тогда
//меняешь $str_arr[0] на $srt_arr[1]
$nomer=$a+1;
echo "$str_arr[0]
";
}
}
if (!$str_arr) echo "Игр на эту букву нету";
}
?>
-
xax:
последние три -
6 ->
7 ->
8 ->
А ты уверен, что у тебя пустых строк в файле нет?
-
Mog.
Mog.:
//Тебе, кстати, давали совет поменять изначально эти части местами при создании файла news.txt
Ты имеешь ввиду поменять местами первый и второй столбцы?
Так это можно
Большое спасибо, твой код офигенная штука, и особенное спасибо за комментарии, самое важно ещё и понять код
А зачем $nomer=$a+1;
-
>$nomer=$a+1
затем, что строки в файле считают : один, два, три, ... и т.д., а элементы в массиве : ноль, один, два, ... и .тд.