![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
drpain |
|
|||
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 27.9.2007 Репутация: нет Всего: нет |
Дотрого времени суток!!!
Уважаемые профи, хотелось бы поинтересоваться, как было бы лучше хранить данный с древовидной связью, тоесть родитель, от него несколько детей, от каждого ребенка еще несколько..... так вот, я хотел спросить как лучше всего хранить эту информацию, потомучто я делал по разному и одномерным массивом, и многомерным, класс свой писал, подобие С++ List даже делал, но вот самого оптимального метода сам найти не смог, Хотелось бы узнать как это делать правельней всего... Зарание благодарен. |
|||
|
||||
dsCode |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 565 Регистрация: 8.9.2007 Где: Saint-Petersburg Репутация: нет Всего: 26 |
drpain, массив в php - это Вам и "массив", и "матрица", и "динамический список", и "дерево" и ... много чего еще. Те, кто изначально программировал на PHP, воспринимают язык Си, например, как нечно страшное ("как это тут нет таких красивых массивов?" "что еще за динамический двунаправленный список"). С другой стороны, программисты, которые изначально программировали на Си, могут воспринять PHP как детскую игрушку (да простят меня за сравнение, я в принципе, и сам на PHP пишу), в которой не написать правильно можно только, если руки не из того места растут - уж больно там все красиво и хорошо сделано (конструктор лего. В PHP хоть как пиши (ну, если голова есть на плечах) - все равно правильно будет. Но.. это и верно. Облегчение рутинной работы - главная идея прогресса =)) (это, кстати, причина, по которой за PHP платят меньше всего (в отличии от Си или Java, например), потому что каждый второй студент поставил Денвер, "изучил" его (PHP) и быстро записался в ряды программистов). Профессионалов PHP мало сегодня.
Поэтому, (сейчас пошла часть, относящаяся к топику) - чем плох массив? Его, к тому же, можно потом сериализовать и хранить в куках (или в файлах - строкой в общем), и потом снова превращать в многоуровневое дерево. В принципе, можно и объектами - root объект, у него есть проперть children, которая является массивом объектом - таких же, как рут. Массивы - для обработки, а если именно хранить (для последующего обращения), то база - самый хороший вариант (будет id и parent_id у каждой записи - исходя из этого можно построить дерево неограниченной вложенности и длины). а по каким параметрам Вы определяли оптимальность? Скорость работы? Удободоступность нодов в дереве? Еще может по каким? Нельзя что-то конкретное посоветовать, потому что для достижения самого оптимального варианта, может быть привязка к конкретному таску. |
|||
|
||||
drpain |
|
|||
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 27.9.2007 Репутация: нет Всего: нет |
dsCode, спасибо за оказаное внимание
Я просто изначально сидел на С++, там все понятно и по крайней мере для меня являлось нормой, указатели, преобразование типов, ссылки, ну и т.д. в РНР я с каждым днем нахожу отличия, которые гдето радуют гдето огорчают, ну да ладно.... Особенна важна у меня ща проблема такая, у меня есть небольшой древовидный массив, не глубокий (т.е. я базу юзать не хочу), и его надо хранить в файле с максимально возможной скоростью нахождения и замены элементов, вот я и спросил как лучше хранить его в массиве, да и в файле конечно.... если есть какие нить предложения, зарание благодарен |
|||
|
||||
dsCode |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 565 Регистрация: 8.9.2007 Где: Saint-Petersburg Репутация: нет Всего: 26 |
drpain, ну я так и понял сразу, поэтому и упомянул про сериализацию. Есть стандартные функции в PHP: serialize($array) и unserialize($string). Первая преобразует массив в строку особого (сериализованного) формата, которую можно записать в файл. Кстати, данные сессий, например, так и хранятся, но тем не менее, почему-то мы обращаемся к данным сессий через массив. А дело в unserialize($string), которая делает обратное преобразование - из строки в массив.
Поэтому - перед записью в файл - сериализуйте, при чтении - unсериализуйте. Доступ к элементам - по ключу - как в обычном массиве. если поиск по значению, - можно и циклом перебрать, можно (и даже лучше, наверное) стандартной функцией array_search($value, $array) (возвращает ключ найденного элемента, дальше по этому ключу - апдейт). В общем - посмотрите стандартные функции для работы с массивами. |
|||
|
||||
Vaulter |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1724 Регистрация: 30.12.2002 Где: бункер Репутация: нет Всего: 22 |
поищите в разделе PHP слова
"nested sets". может найдете даже саму либу... |
|||
|
||||
logiciel |
|
|||
Новичок Профиль Группа: Участник Сообщений: 45 Регистрация: 5.7.2006 Репутация: нет Всего: нет |
А почeму бы нe XML? В PHP5 работа с XML-файлами ужe вполнe хорошо рeализована.
|
|||
|
||||
drpain |
|
|||
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 27.9.2007 Репутация: нет Всего: нет |
Всем, огромное спасибо, особенно dsCode, Вы подсказали именно то что мне нужно, премного благодарен.
![]() Это сообщение отредактировал(а) drpain - 4.10.2007, 09:45 |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Для профи | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |