Здравствуйте, Не знаю как правильно вытащить данные из многомерного массива, пока пришёл к такому решению: Код (Text): foreach($faq as $key => $vol) { foreach($faq[$key] as $answers) { printf('<li id="answer%s"><span class="spanh3">%s</span>%s</li>'."\n",$answers['id_question'],$answers['question'],$answers['answer']); } } Я использую первый цикл для того, чтобы всего лишь получить ключи вложенных массивов, хоть и работает, но чую это какая ерунда) Есть ли ещё способы получить ключи? Ключи у меня числа, но они не по порядку, т.е. 1, 3, 4, 8
Почти правильно. $vol - это массив, если $faq многомерен. так что во втором foreach можно использовать его вместо $faq[$key]. Ответ на второй вопрос - array_keys()
array_keys() но в приведённом коде никак не получится изменить тот факт, что нужен будет цикл по ключам + цикл по каждому ответу.
вот массив: Код (Text): Array ( [1] => Array ( [1] => Array ( [id_question] => 1 [hide] => show [n_group] => 1 [question] => Как установить плагин? [answer] => The main aim of this site is to help people follow their heart. [position] => 1 ) [2] => Array ( [id_question] => 2 [hide] => show [n_group] => 1 [question] => Какие права доступа бывают? [answer] => Morbi imperdiet aliquam condimentum. Ut a sem nisl, nec mollis tellus. [position] => 2 ) ) [2] => Array ( [3] => Array ( [id_question] => 3 [hide] => show [n_group] => 2 [question] => Зачем нужно регистрироваться? [answer] => The main aim of this site is to help people follow their heart. [position] => 5 ) [4] => Array ( [id_question] => 4 [hide] => show [n_group] => 2 [question] => Что делать, если забыли пароль [answer] => The main aim of this site is to help people follow their heart. [position] => 6 ) ) )
Блин, треш какой-то, а не массив Я бы сделал так: Код (Text): foreach ($arr as $key=>$item) $out[]=array_values($item); Получите нормальный массив с нормальной нумерацией, а не со сквозной, начинающейся с 1.
лишний массив, поэтому лишний цикл. может разделы какие-то. в принципе всё верно, только не стоит называть перменную "ответы", когда в ней живёт и вопрос, а ответ всего один.
так я список вопросов уже вывел в одном блоке, а список ответов нужно вывести в другом, ответы и вопросы должны быть связаны по общему id, ну чтобы якоря сделать.. ещё у меня вопросы разделены по группам, вот поэтому на выходе и получился такой массив - Группа вопросов 1 - Вопрос 1 - Вопрос 2 - Вопрос 3 Группа вопросов 2 - Вопрос 1 - Вопрос 2 - Вопрос 3 ... и т.д. --------------------- а ниже список ответов--- .......... может я не верно изначально всё спланировал, вот и получается лишний цикл, да тут ещё выбор - либо лишний запрос делать либо лишний цикл)
примерно такую хочу сделать - http://www.code-pal.com/examples/create-an-interactive-faqs ... nd-jquery/ вернее уже сделал, тока не уверен что сайт будет нормально и стабильно работать с вложенными циклами друг в друга
Одно другому не мешает, если циклы построены корректно и не зацикливаются. Хотя зациклить foreach - это надо очень постараться...
вот это я имею ввиду, не верен что я правильно сделал цикл который в самом начале показал, хотел узнать есть ли ещё способы решить туже самую задачу без запросов к бд, а также в процессе обсуждения появился новый вопрос - а что менее ресурсопотребляемое - использовать больше запросов к БД но меньше циклов, или наоборот - пусть будет больше циклов но за зато меньше запросов? я то всё думаю что любыми путями нужно сделать меньше запросов к бд, только откуда это взял не помню Добавлено спустя 29 минут 3 секунды: немножко изменил код на такой вариант не слишком страшный? Код (Text): foreach($faq as $vol) { foreach($vol as $answers) { printf('<li id="answer%s"><span class="span-h3">%s</span>%s</li>'."\n",$answers['id_question'],$answers['question'],$answers['answer']); } }
ты показал структуру, в которой так переменную назвать глупо. объясни пожалуйста, что у тебя в $answers.
По моему опыту один запрос к БД вместо двух - это обычно незаметно, даже один вместо 10. Вот когда я на реальном проекте уменьшил количество запросов с 1000 (не ожидал, что клиент задаст такое кол-во данных) до 1, это конечно дало эффект.
спасибо, понял Добавлено спустя 13 минут 47 секунд: массив который показал выше уже второй раз использую), первый раз с помощью его вывел список вопросов по группам, каждый вопрос как ссылка на ответ, там переменная называется $questions а второй раз, который сейчас тут, вывожу список ответов, в заголовке ответов также вопрос присутствует но уже никак ссылка а как заголовок, поэтому в этом цикле назвал её $answers [1] => Array - $answers['id_question'] [question] => Как установить плагин? - $answers['question'] [answer] => The main aim of this site is to help people follow their heart. - $answers['answer']
т.е. ты назвал переменную "ответы", хотя в ней только один ответ, и между прочим даже вопрос? =) ты уверен, что ты поступил верно?
да я уже понял к чему Вы это), - никто не может знать как лучше будет в моей ситуации, в общем тема закрыта, вопрос решён - отставляю всё как есть благодарю всех за помощь, всё учёл, выводы сделал
Это не столь праздный вопрос. Ты назвал переменную так, потому что хочешь это получить из нее. Но возможно имеет смысл в более сложной ситуации, с которой ты столкнешься, пересобрать массив в более удобную форму. Пхп в этом плане очень гибкий язык, т.к. позволяет использовать любые ключи, и в любом порядке. А форычей бояться не надо. Они как раз отработают нужное количество циклов. Ровно столько, сколько есть членов в массиве. я так, на будущее.