LINUX.ORG.RU

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

 


0

1
Array
(
    [О_компании] => Array
        (
            [Структура] => 
            [Лицензии_и_сертификаты] => 
            [Фотогалерея] => 
            [Вакансии] => 
        )

    [Специалисты] => 
    [Услуги_и_Цены] => 
    [Клиентам] => Array
        (
            [Как_стать_нашим_клиентом] => 
            [Вы_наш_клиент] => 
        )

    [Корпаративным_клиентам] => Array
        (
            [Услуги] => 
        )

    [Контакты] => 
)
$path = showPath("Как_стать_нашим_клиентом");

Array
(
    [0]  =>  Клиентам
    [1]  =>  Как_стать_нашим_клиентом 
)
function showPath ($string)   {
    ?
    return $path
}
★★★★★
Ответ на: комментарий от imb

само собой эта функция не дает ожидаемый результат.

petav ★★★★★
() автор топика

Может проще будет найти нужное, если искать алгоритмы для деревьев/графов, а не массивов.

Elyas ★★★★★
()

сделай одномерный индексный массив, и ищи по нему.

А вообще говоря, для таких вещей СУБД придумали.

drBatty ★★
()
Ответ на: комментарий от petav

наверное array_walk нужно

сделать свой, чтобы возвращал массив, как array_map. В колбеке делаешь сравнение и вызов my_array_walk. Все.

linuxnewb
()
Ответ на: комментарий от aol

Не знал ни чего про это понятие. Но на сколько я понял (бегло) они разбирают URI а в моем случае архитектура страниц в массиве. Спасибо за кругозор.

petav ★★★★★
() автор топика
Последнее исправление: petav (всего исправлений: 1)
Ответ на: комментарий от petav

Так, что-то я туплю. Если у тебя реально такой массив:

   [Корпаративным_клиентам] => Array ([Услуги] => )
и больше никаких данных в нем нет, и задача ровно та, что ты описал — то да, массив лучше. Правда, я с трудом представляю, где на практике такое может понадобиться, кроме случая промежуточного результата.

linuxnewb
()
Ответ на: комментарий от linuxnewb

Правда, я с трудом представляю, где на практике такое может понадобиться, кроме случая промежуточного результата.

  • Дерево храниться в текстовом файле, где " " в начале строки уровень вложенности меню.
  • пункт меню совпадает с названием файла. «О компании» == «О компании.php» и т.п.
  • В паке файлы «<пункт_меню.php>» хранятся плоско (одноуровнево)
  • сайт визитка на 15 полу-статичных страниц
petav ★★★★★
() автор топика
Последнее исправление: petav (всего исправлений: 3)
Ответ на: комментарий от petav

пункт меню совпадает с названием файла. «О компании» == «О компании.php» и т.п.

Эпично… Дай ссылку в коллекцию.

drBatty ★★
()
Ответ на: комментарий от petav

Это уже совсем другое.

Дерево храниться в текстовом файле, где " " в начале строки уровень вложенности меню.

То есть массив ты строишь по этому файлу, и в нем уже ищешь вхождение для подменю. В случае БД ты просто запрашиваешь нужный уровень.

Кстати, не совсем понятно, как ты формируешь/парсишь url страницы.

linuxnewb
()
Ответ на: комментарий от linuxnewb

В случае БД ты просто запрашиваешь нужный уровень.

Это понятно.

Кстати, не совсем понятно, как ты формируешь/парсишь url страницы.

mod_rewrite, uri плоский, не повторяет структуру. (Может позже будет формироваться вложенным.)

http://site/О_компании
Затем
 $URI = (isset($_SERVER['PATH_INFO'])) ? $_SERVER['PATH_INFO'] : '';   
 $this->URIelements = array_values(array_filter(explode('/', $URI))); 
параметры передаю так же через URI
http://site/Новости/1
В массиве $this->URIelements будет два элемента, первый всегда имя страницы («Новости»), второй и последующие параметры для ее формирования («1»)

petav ★★★★★
() автор топика
Ответ на: комментарий от petav

Я бы для перевозки спортивной сумки не стал нанимать фуру.

вот именно! Ты пытаешься доехать из моськвы до питера на самокате. Открою тебе Тайну: тебя на фуре даже бесплатно подвезут, с твоей сумкой. И это будет намного проще, легче и быстрее.

Не хочешь тащить mysql(который везде и так есть), возьми sqlite.

Хотя — дело твоё, просто больно на тебя смотреть, на твой самокат, и на твою упоротость.

drBatty ★★
()
Ответ на: комментарий от drBatty

Не переживай за меня. Займись делом.

petav ★★★★★
() автор топика
Ответ на: комментарий от petav

(Может позже будет формироваться вложенным.)

будет два элемента

Самое плохое то, что ты сейчас сам не знаешь, какие данные и в каком воде будешь хранить и использовать. Про усложнение структуры массива я вообще промолчу — у тебя уже сейчас проблемы вылезли, практически на ровном месте. При этом усложнение данных не приведет ведет к упрощению алгоритма, а наоборот, потребует его усложнения. И чего ты в результате добился?

linuxnewb
()
Ответ на: комментарий от linuxnewb

У меня проблемы только в алгоритме обработки деревьев на php, не более. Естественно предположить, что формирование запроса к базе упростит алгоритм программы. Но, приведу пример. Запросили меню сайта, получили массив, обработали массив в html представление. Далее необходимо запросить цепочку навигации, делаем запрос, вытаскиваем цепочку. Два запроса.

А не проще один раз, на всю сеcсию формирования страницы, запросить меню в массив и из разных частей сайта строить, где хочешь меню, где хочешь цепочку навигационную, но уже по информации хранящейся в классе. ИМХО, работа класса будет быстрее чем работа SQL по TCP/IP.

И еще одно, нельзя составить полноценное мнение об объекте, если обладаешь лишь частью информации. Мой вопрос содержит только самую суть, без посвящения Вас в Техническое Здание. Поэтому большинство советов, типа «быдлокод» не воспринимаю как конструктивные.

Я выбираю загрузку меню в класс с которым я как угодно могу оперировать расширяя методы. Из чего будет загрузка, из SQL или из файла, по сути плевать. Да, кто-то привык делать 100500 запросов к базе на одной странице. Дело каждого.

И еще, попросту величина данной задачи не подразумевает наличие базы данных.

petav ★★★★★
() автор топика
Ответ на: комментарий от petav

У меня проблемы только в алгоритме обработки деревьев

запросить меню в массив

уже по информации хранящейся в классе

И еще, попросту величина данной задачи не подразумевает наличие базы данных.

Так бы и сказал, что курсач делаешь. язабан

linuxnewb
()
Ответ на: комментарий от petav

если кто нибудь взрослый тебя поддержит.

взрослый

У меня проблемы только в алгоритме обработки деревьев

Ну ты понял, да?

linuxnewb
()
Ответ на: комментарий от goingUp

Спасибо, кэп.

алсо, тебя скобка не открыта, парсер будет ругаться.

linuxnewb
()
Ответ на: комментарий от linuxnewb

Дерево хранить получилось и очень удобно, а вот построить дерево по данным «из файла с пробелами» нет. Не могу математику поиска parentid преодолеть.

petav ★★★★★
() автор топика
Последнее исправление: petav (всего исправлений: 1)
Ответ на: комментарий от petav

Да, мысль есть. В контексте данной задачи парент не нужен.

linuxnewb
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.