Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: обход дерева ассоциативных массивов
Уже голову сломал, не выходит ничего.Отредактировано модератором: Саныч, 07 Июля, 2013 - 11:41:05
OrmaJever
Отправлено: 07 Июля, 2013 - 11:19:14
Активный участник
Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010 Откуда: Чернигов
Помог: 299 раз(а)
смотря что с ним нужно сделать, но я думаю рекурсия подойдёт.
----- Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
roadster
Отправлено: 07 Июля, 2013 - 11:39:30
Новичок
Покинул форум
Сообщений всего: 17
Дата рег-ции: Июль 2013 Откуда: Ukraine
Помог: 0 раз(а)
Нужно написать функцию, которая проходила бы до определенного элемента в дереве, что бы можно было модифицировать данные пользователей которых она проходит по пути к выбранному, или даже просто посчитать сколько "точек" нужно пройти что бы добраться до указанного 'loginId'. Да про рекурсию я уже понял конечно, но все равно не выходит, ну не хватает мне опыта к сожалению (
Если можно напишите хотя бы простой пример применимый к данной ситуации, а то у меня мозг на взрыве. Нужно что-то вроде такого, но к сожалению пока не додумался как закончить...
и еще попутно вопрос, нельзя ли без рекурсии, я не говорю что нужно без нее, скорее всего так было бы проще, хотя сам еще не додумался как правильно составить цикл, но все же.. (Добавление)
Никто не может помочь? Отредактировано модератором: Саныч, 07 Июля, 2013 - 11:40:42
MADONZY
Отправлено: 07 Июля, 2013 - 12:53:44
Гость
Покинул форум
Сообщений всего: 104
Дата рег-ции: Июнь 2013
Помог: 0 раз(а)
roadster, тот код что ты кинул - абсурд...
1 - не закрыл кавычку:
Спасибо, за кавычку сорри, это я писал как пример. Буду пробовать. (Добавление)
Столкнулся с такой проблемой, что бы сохранить результат, мне нужно объявить массив в начале функции $result = array(); и получается при рекурсии, функция снова запускается и переменная не сохраняет предыдущий результат, имхо $result = array(); очищает переменную, как быть?
Denkill
Отправлено: 07 Июля, 2013 - 13:14:44
Посетитель
Покинул форум
Сообщений всего: 330
Дата рег-ции: Янв. 2013 Откуда: Барнаул
Помог: 7 раз(а)
roadster $result = array(); пиши не в рекурсию а выше
Покинул форум
Сообщений всего: 104
Дата рег-ции: Июнь 2013
Помог: 0 раз(а)
Тогда используй статическую переменную
DelphinPRO
Отправлено: 07 Июля, 2013 - 13:33:50
Активный участник
Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012
Помог: 353 раз(а)
MADONZY пишет:
3 - тут только рекурсия тебе поможет...
Запомните: любой код написанный с использованием рекурсии можно написать без использования оной.
----- Чем больше узнаю, тем больше я не знаю.
EuGen
Отправлено: 07 Июля, 2013 - 13:42:37
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
DelphinPRO
Я бы сказал больше - любой код может быть преобразован к виду, в котором последовательно используется только цикл и ветвление (то есть, к примеру, if + while) теорема Бёма-Якопини
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
roadster
Отправлено: 07 Июля, 2013 - 13:46:40
Новичок
Покинул форум
Сообщений всего: 17
Дата рег-ции: Июль 2013 Откуда: Ukraine
Помог: 0 раз(а)
Подскажите пожалуйста, где у меня ошибка, вот что получилось:
Покинул форум
Сообщений всего: 17
Дата рег-ции: Июль 2013 Откуда: Ukraine
Помог: 0 раз(а)
Как же тогда быть? Если их объявить в функции то они будут обнуляться посредством $result = array(); $temp = array(); как я уже писал выше. Использовать глобальные переменные?
vanicon
Отправлено: 07 Июля, 2013 - 13:58:23
Частый посетитель
Покинул форум
Сообщений всего: 808
Дата рег-ции: Янв. 2010 Откуда: Самара
echo('Key is '.$sKey.'; value is '.$sValue.'; depth is '.$rRecursiveIterator->getDepth().PHP_EOL);
}
?
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
roadster
Отправлено: 07 Июля, 2013 - 14:06:33
Новичок
Покинул форум
Сообщений всего: 17
Дата рег-ции: Июль 2013 Откуда: Ukraine
Помог: 0 раз(а)
[quote=vanicon]roadster http://www.php.su/learnphp/vars/?statvars [/quote]
Да да, извиняюсь, переписал со статикой, теперь функция просто зациклилась... (Добавление)
[quote=EuGen][/quote]
Спасибо большое, теперь хоть есть над чем покурить! (Добавление)
Вот что получилось, собственно теперь вопрос в другом, как мне получить все элементы, которые проходит цикл до указанного ($loginId), если корень не один, а два, три и т.д.
У меня получается так, что элементы считает от первого и пока не найдет нужный, а как сделать что б считало от корня, в котором нужный элемент ($loginId) находится?
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.