Программирование > PHP
Создание собственной CMS
kolyuchii.exe:
пытаюсь создать собственную систему управления сайтом на базе двумерного массива на ПХП, но ранее этот язык не изучал никогда.
Посоветуйте вот по каким вопросам:
для поиска по базе данных (выполненной в виде массива) статей я использую функцию similar_text(), которая сравнивает строку запроса и значения массива (предварительно все значения массива разбиты на отдельные слова) и если число совпадений = 5, то это слово (и сам под_массив) считаются удовлетворяющими условию поиска и выводятся на страницу. Разумно ли использование этой функции или есть более изящный метод?
Что делать или какую функцию применять для замены одного (допустим, неверного) значения элементов двумерного массива на другое (верное)? Да так, чтобы эти изменения записывались в файл базы данных.
Спасибо!
CGVictor:
kolyuchii.exe
0. Так. Давайте сначала определимся с терминологией: файл - это файл, а база данных - это отдельный сервер базы данных. Не надо смешивать, говоря об одном и том же - так принято и так удобнее.
1. Откуда берется "число совпадений = 5"? Какая должна быть логика у алгоритма, в самом принципе? Обьясните популярно, что и как должен делать описанный вами метод.
2. Ну и, пока абстрактно: решение с [p]similar_text[/p] с ее N^3 может быть оправданным, но точно не лучшим. Напишите, что требуется сделать - а там найдем более быстрое решение.
Примеры кода и запроса greatly appreciated.
kolyuchii.exe:
Извиняюсь за мой "компьютерный".
Выкладываю всё по порядку:
есть некая форма ввода данных, писаная на хтмл. данные из этой формы передаются на обрабатывающий скрипт методом POST, который записывает эти данные в файл в виде двумерного массива
<?
$mas[] = array("", "","");
$mas[] = array("", "","");
$mas[] = array("", "","");
.................................
$mas[] = array("", "","");
?>
Это всё уже работает.
когда юзер грузит страницу, она (страница) прикрепляет файл с массивом, извлекает из него значения с помощью foreach и выдает юзеру.
Это тоже работает.
Теперь юзер хочет найти нечто определённое, отправляет запрос и...
вот дальше самое интересное:
тот же самый двумерный массив, разбиваем на подмассивы, потом их (подмассивы) преобразуем в строку, разбиваем её на отдельные слова и сравниваем каждое слово со строкой запроса - это тоже вроде работает, НО! Но если юзверь наберёт "вася", а в элементах массива будет только слово "василий", то результат поиска будет никакой.
По этому я и применил similar_text(), которая сравнивает запрос с каждым словом из элемента массива и если в строке запроса и в слове из элемента массива 5 или более совпадающих символов, то строки считаются идентичными.
цифра -5- взята чисто эмпирически, как наиболее подходящая (ИМХО).
И ещё мне абсолютно не ясен алгоритм замены отдельных значений массива.
CGVictor:
kolyuchii.exe
По задаче - все равно ничего не ясно. Ну да и ладно;
Функция: есть же [p]strpos[/p], только для нормальной работы надо бы ей передавать не целиком запрос, а что-то вроде substr($qry,0,round(strlen($qry)*.0.8)) - чтобы убрать окончания слов. Это, понятное дело, самый простой вариант, можно и сложнее заморочиться.
Замена: технически, замена это не что иное, как задание нового значения. Поэтому $arr[$key]=$value, или для подмассива, $arr[$key1][$key2] = $value;
Altaxar:
У меня была задача: узнать номер id записи в MySQL где встречается искомое слово, но упорядочить по коэффициенту совпадения, у MySQL подобное есть но только не с буквами а со словами.
например: Prague , Praha , Praga - это все 3 слова правильно написаны.
ну и превратил буквы в слова, теперь работает, на скорость пока не жалуюсь. Если интересно могу продолжить.
Навигация
Перейти к полной версии