Forum Webscript.Ru

Программирование => PHP => Тема начата: xax от 16 Февраля 2004, 22:29:05

Название: Поможем?
Отправлено: 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 ссылки соответствовало той строчке из которой ьерётся сортируемое слово!
Название: Поможем?
Отправлено: Меняздесьдавнонет от 16 Февраля 2004, 23:00:59
подайте убогому, кто-нибудь.
у меня уже сил нет.
Название: Поможем?
Отправлено: xax от 16 Февраля 2004, 23:06:25
RomikChef
Блин Ром, не надо оскарБлять, убогий, ну хех все мы начинали
Название: Поможем?
Отправлено: xax от 16 Февраля 2004, 23:08:18
Я хочу понять, а не чтоб мне код написали!
Название: Поможем?
Отправлено: Макс от 16 Февраля 2004, 23:14:02
xax
[off]для начала весь php-код оформи тегами [ php ] ... [/ php ] (без пробелов). А то неудобно читать. [/off]
Название: Поможем?
Отправлено: xax от 16 Февраля 2004, 23:16:12
Макс
хм, странно, по моему наоборот сложнее!
Название: Поможем?
Отправлено: Меняздесьдавнонет от 16 Февраля 2004, 23:22:05
xax
уж тебе-то должно быть все равно.
ты ведь не понимаешь ни одной строчки в этом коде
Название: Поможем?
Отправлено: xax от 16 Февраля 2004, 23:29:25
RomikChef  В каком из?
Название: Поможем?
Отправлено: Mog. от 17 Февраля 2004, 11:35:53
xax
Начну с начала
1. Покажи хотя бы 3 строчки файла news.txt как они в нем есть
2. Покажи эти же 3 строчки, как тебе хотелось бы их видеть.
Название: Поможем?
Отправлено: Меняздесьдавнонет от 17 Февраля 2004, 14:17:47
Mog. ему не строчки надо видеть.
перечитай вопрос
Название: Поможем?
Отправлено: Mog. от 17 Февраля 2004, 14:31:08
Цитировать
RomikChef:
ему не строчки надо видеть
Это мне строчки надо видеть. Потому, что
Цитировать
вопрос
-то я и не понял.
Название: Поможем?
Отправлено: Меняздесьдавнонет от 17 Февраля 2004, 14:39:23
смотри.
он хочет вывести список строк из файла, со ссылками на редактирование.
до того, как он сортировал этот список, у него все совпадало.
номера строк.
вывел ссылку номер ноль - и в файле это строка первая.
но потом он захотел выводить, сортируя.
и у него совпадать перестало.
я считаю, что здесь поможет только паталогоанатом.
Название: Поможем?
Отправлено: Mog. от 17 Февраля 2004, 14:53:12
Цитировать
RomikChef:
редактирование

редактирование чего?

Цитировать
RomikChef:
до того, как он сортировал этот список, у него все совпадало.
В смысле НЕ сортировал?


[off]Гы! RomikChef, а ты откуда знаешь, что он хочет:)[/off]
Название: Поможем?
Отправлено: Меняздесьдавнонет от 17 Февраля 2004, 14:59:45
да тут все на ладони.
из логики скрипта.

пока НЕ сортировал - совпадало.
Название: Поможем?
Отправлено: FreeSpace от 17 Февраля 2004, 19:40:22
xax
Слушай, может выучишь SQL хотя бы на элементарном уровне и начнешь использовать базу данных?
Потому что извращаться с подобной сортировкой я бы на твоём месте не начинал.
Нет, безусловно, реализовать это возможно, но ты просто не поймешь, как оно работает. Да и Ромик готовый код опубликовать для тебя не даст :)
Название: Поможем?
Отправлено: Меняздесьдавнонет от 17 Февраля 2004, 19:54:29
FreeSpace
все я дам.
а советовать ему изучать SQL - это все равно, что советовать изучать интегралы человеку, не знающему таблицу умножения.
ему все равно, что учить  он пока не знает даже пхп.
самостоятельно он НИ СТРОЧКИ написать не может.
Зачем ему Sql, если он не знает пхп?
Название: Поможем?
Отправлено: xax от 18 Февраля 2004, 19:17:57
RomikChef Не прав, я сам написал, форму забивки данных!
Кстати, для интеграллов таблица умножения не нужна :)
Собственно говоря, код это хорошо, но мне нужно и понять, что и как в нём, так как мне выучить пхп надо, да и интересно
Если кто может, то помогите
Кстати, я бы и sql учил, но когда начал читать статьи по этой байде, нифига не понял!
Название: Поможем?
Отправлено: Xander от 18 Февраля 2004, 20:17:14
xax
а что такое интеграллы?
Название: Поможем?
Отправлено: xax от 19 Февраля 2004, 16:55:47
Xander Интегралл, это обратное действие взятия производной, интеграл от f(x)dx=F(x)
Лучше бы помог, чем глупости спрашивать
Название: Поможем?
Отправлено: xax от 19 Февраля 2004, 16:57:23
Подскажите, хоть, где менять надо и какие фуенкции использовать
Название: Поможем?
Отправлено: Mog. от 19 Февраля 2004, 18:26:24
Информация для размышления (по поводу сортировок)

$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 "
";
?>
Название: Поможем?
Отправлено: xax от 20 Февраля 2004, 00:20:22
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"
Название: Поможем?
Отправлено: Mog. от 20 Февраля 2004, 10:24:13
Цитировать
xax
Ты не совсем понял
Я совсем не понял, что нужно.
Я напишу чего я понял, а ты поправь.
1. У тебя есть файл состоящий из отдельных строк
2. Каждая строка состоит из двух частей разделенных символом ";"
3. Необходимо прочитать файл в массив построчно
4. Необходимо отсортировать массив по второй части строки
5. При сортировке необходимо сохранять связь между строкой в массиве и местоположением строки в файле
6. После сортировки из этого массива необходимо выбрать строки, вторая часть которых начинается на букву $word
7. Выбранные строки(или их первую/вторую часть) показать в виде ссылок с параметром определяющим местоположение строк в файле

Y/N
Название: Поможем?
Отправлено: xax от 20 Февраля 2004, 18:35:56
Mog. Да ты полностью прав, только под буквой $word ты имел ввиду, что в адресной строке в зависимости от того чему равен этот ператор, такую страницу он и будет нам выдовать или нет,
а так полностью верно
Название: Поможем?
Отправлено: Mog. от 21 Февраля 2004, 11:00:39
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 "Игр на эту букву нету";
}
?>
Название: Поможем?
Отправлено: Mog. от 21 Февраля 2004, 11:02:42
Цитировать
xax:
последние три -
6 ->
7 ->
8 ->
А ты уверен, что у тебя пустых строк в файле нет?
Название: Поможем?
Отправлено: xax от 22 Февраля 2004, 01:38:45
Mog.
Цитировать
Mog.:
//Тебе, кстати, давали совет поменять изначально эти части местами при создании файла news.txt

Ты имеешь ввиду поменять местами первый и второй столбцы?
Так это можно
Большое спасибо, твой код офигенная штука, и особенное спасибо за комментарии, самое важно ещё и понять код
А зачем $nomer=$a+1;
Название: Поможем?
Отправлено: Mog. от 25 Февраля 2004, 13:14:49
>$nomer=$a+1
затем, что строки в файле считают : один, два, три, ... и т.д., а элементы в массиве : ноль, один, два, ... и .тд.