Поиск текста в многомерном массиве

Статус
В этой теме нельзя размещать новые ответы.

A-Lex[FM]

Web/Highload/DataScience
Поиск текста в многомерном массиве

Всем привет.
Есть большой многомерный массив (дерево). Содержание примерно такое:
array(2) {
["title"]=>
string(10) "Компьютеры"
["child"]=>
array(15) {
[8]=>
array(2) {
["title"]=>
string(13) "Комплектующие"
["child"]=>
array(13) {
[14]=>
array(2) {
["title"]=>
string(14) "Звуковые карты"
["child"]=>
array(0) {
}
}
}
}
}
}
Это лишь малая его чать.

Мне необходимо сделать поиск по нему, например по слову звук должно вернуться:
{id=>"14", title=>"Звуковые карты", path=>"Компьютеры \ Комплектующие"}

Я уже полтора часа не могу придумать алгоритм, помогите с идеями
 

Marquis

Новичок
тема не для раздела "Вопросы по теории программирования".
обходим массив проверяя каждый элемент на соответствие запросу, как вариант посимвольно сравнивая строки.

-~{}~ 16.08.07 08:43:

А вообще что мешает загрузить дерево в БД и воспользоваться встроенными функциями поиска?
 

A-Lex[FM]

Web/Highload/DataScience
Хорошо. Я сделал поиск в базе и получил нужные мне id и title.
Теперь мне нужно получить полный путь от вершины дерева, до каждого элемента.
 

HraKK

Мудак
Команда форума
Хорошо, я собрал холодильник, теперь мне нужно приделать суда охлаждающюю систему.

-~{}~ 16.08.07 08:54:

а вообще - рекурсия.
 

A-Lex[FM]

Web/Highload/DataScience
Народ, я понимаю что это звучит смешно.
Но получать полный путь при помощи вложенных запросов это глупо. Я прошу просто алгоритм, а не готовую функцию.

-~{}~ 16.08.07 12:55:

Я и использую рекурсию, но работает она криво :(
 

jer

...
для быстрого получения полного пути, есть различные способы хранения дерева
 

HraKK

Мудак
Команда форума
Где я сказал про вложенные запросы?
"Криво" - это как?
 

A-Lex[FM]

Web/Highload/DataScience
вот такой вот код, я просто уже 3 часа мучаю моск и не могу это реализовать.

$stop = 0;
function findInCat($cats, $id) {
global $stop;
$stop = 0;
foreach ($cats as $key => $value) {
if ($stop) {
break;
}
$path = $value['title'];
if ($id == $key) {
$stop = 1;
return $path;
}
if (count($value['child'])) $path .= " \ " . @findInCat($value['child'], $id);
}
}
 

HraKK

Мудак
Команда форума
Кстате да, если вас не устраивает рекурсия в силу религиозных причин, копайте сюда http://phpclub.ru/faq/wakka.php?wakka=Tree&v=w5u

-~{}~ 16.08.07 09:04:

Мдэ. Руки опустились.
Вам надо идти работать дворником.

1) За это руки выдергивать надо. Перепешите без этого.
2) Напишите русскими словами алгоритм.
 

A-Lex[FM]

Web/Highload/DataScience
Я прекрасно понимаю что код кривой, но я не могу придумать алгоритм. Приходится извращяться.

Суть такая. Есть дерево, которое хранится в массиве (см первый пост), необходимо получить полный путь до определённого ключа, например 14 => звуковые карты

на выходе должно быть Компьютеры \ Комплектующие \ Звуковые карты
 

Фанат

oncle terrible
Команда форума
A-Lex[FM]
пока не прочитаешь в гугле и на форуме про слово "рекурсия", можешь даже сюда не приходить.
Любые вопросы принимаются только по проблемам конкретных реализаций этого алгоритма.
 

HraKK

Мудак
Команда форума
A-Lex[FM]
Я вижу постановку задачи, но ее я понял с первого поста и не просил вас повторять ее, я не тугой.

Подумайте еще раз над алгоритмом. Не надо смешитавать поиск и нахождение пути.

Алгоритм в 3 строчки. Ключевое слово рекурсия. Думайте. Придумаете пишите.
 

Фанат

oncle terrible
Команда форума
тема закрыта.
не потому, что автор в чем-то неправ, а превентивно, от доброхотов, которым аж жжет в одном месте показать, какие они умные.

A-Lex[FM]
будут вопросы - создавай новую. Но не бай бог без соблюдения условия, указанного выше...
 

HraKK

Мудак
Команда форума
*****
Блин, опередил я ее хотел закрыть =) Таки я и закрыл :D
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху