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
Форумы портала PHP.SU :: Версия для печати :: Вывод массива в переменную
Форумы портала PHP.SU » » Вопросы новичков » Вывод массива в переменную

Страниц (1): [1]
 

1. njuha - 11 Апреля, 2017 - 04:50:27 - перейти к сообщению
Доброе время суток.

Для выполнения некоторых задумок приходится изменять/дописывать php код движка. К сожалению, CMS не слишком поддаётся изменениям в виду деревянности кода.

Собственно структура следующая - есть фахл конфигурации php и шаблон. Из php файла в шаблон передаются данные, выходящие через foreach.

В стандартном варианте выборка делается из одной таблицы БД и цыклично выводится.

Мне нужно немного изменить идею и выводить данные не из одной таблицы БД, а из двух. Выбрать значения из 1-ой таблицы БД и вывести значения из 2-ой таблицы, где id строк равны значениям из 1-ой.

Я написал код вывода значений из 1-ой таблицы. На данном этапе пытаюсь "прикрепить" к ним значения из 2-ой.

PHP:
скопировать код в буфер обмена
  1.  
  2. foreach ($cach as $rows)
  3.         {
  4.                
  5.                 $topics = DB()->fetch_rowset("SELECT forum_id, topic_title
  6.                         FROM " . BB_TOPICS . "
  7.                         WHERE forum_id =". $rows['forum_id'] ."
  8.                         " );
  9.                        
  10.                
  11.         $template->assign_block_vars('forums', array(
  12.                         'FORUM_NAME'    => $rows['forum_name'],
  13.                         'FORUM_ICON'    => $rows['forum_icon'],
  14.                         'FORUM_DESC'    => $rows['forum_desc'],
  15.                         'FORUM_UPDATE'  => bb_date($rows['post_edit_time']),
  16.                 ));
  17.                
  18.         }
  19.  


Как видно, мне удалось вытащить необходимые данные из 2-ой таблицы через id. Вот тут я и столкнулся с проблемой. $topics это многомерный массив имеющий следующую структуру:
Спойлер (Отобразить)

Как видно, одному id принадлежит 5 записей и их все нужно вывести.

Исходя из устройства движка
PHP:
скопировать код в буфер обмена
  1. 'FORUM_NAME'    => $rows['forum_name'],

Выводить в шаблон можно лишь одну переменную. Поэтому возник вопрос: Как пять элементов массива вывести в одну переменную при этом имея возможность форматировать текст?

Решение, которое мне пришло в голову, выбрать каждый поочерёдно элемент массива topics по очереди, отформатировать и запихнуть в единую переменную и переменную уже передать в шаблон. К сожалению я не знаю, как подобное осуществить и куда рыть.

Помогите решить проблему, пожалуйста.
2. njuha - 11 Апреля, 2017 - 08:30:05 - перейти к сообщению
Я долго копался в мануалах и кое-что нашёл.
Мне удалось частично решить задачу:
PHP:
скопировать код в буфер обмена
  1. foreach ($cach as $rows)
  2.         {
  3.                
  4.                 $topics = DB()->fetch_rowset("SELECT forum_id, topic_title, topic_id
  5.                         FROM " . BB_TOPICS . "
  6.                         WHERE forum_id =". $rows['forum_id'] ."
  7.                         " );
  8.                        
  9.                        
  10.                
  11.                         foreach ($topics as $topics_for)
  12.         {
  13.                 $topics_id = $topics_for['topic_id'];
  14.                 $topics_title = $topics_for['topic_title'];
  15.                
  16.                
  17.         $weatherAll[].= "<a href='http://test.alexfilm.cc/viewtopic.php?t=$topics_id'>$topics_title</a>";;
  18.         }
  19.                 $comma_separated = implode("<br>", $weatherAll);
  20.                 print_r ($comma_separated);
  21.        

Я запихнул результат цикла foreach в массив, после чего смог разделить массив на строки. Но возникла загвоздка. С каждым новым оборотом общего цикла foreach в массиве $weatherAll происходит не замена данных, а их добавление. То-есть по факту, снежный ком нарастает и я получаю данные подходящие под данный id и все предыдущие.

Как можно решить эту проблему? Есть варианты сбросить foreach?

Логика очень многослойная и я уже немного не понимаю, что можно сделать. Боюсь, что в данном случае штудирование мануалов не поможет.
(Добавление)
Кажется, я всё же понял логику и смог обнулить результат добавив $weatherAll= ""; перед самим циклом.

PHP:
скопировать код в буфер обмена
  1. foreach ($cach as $rows)
  2.         {
  3.                
  4.                 $topics = DB()->fetch_rowset("SELECT forum_id, topic_title, topic_id
  5.                         FROM " . BB_TOPICS . "
  6.                         WHERE forum_id =". $rows['forum_id'] ."
  7.                         " );
  8.                        
  9.                         $weatherAll= "";
  10.                
  11.                         foreach ($topics as $topics_for)
  12.         {
  13.                
  14.                 $topics_id = $topics_for['topic_id'];
  15.                 $topics_title = $topics_for['topic_title'];
  16.                
  17.                
  18.         $weatherAll[].= "<a href='http://test.alexfilm.cc/viewtopic.php?t=$topics_id'>$topics_title</a>";
  19.        
  20.         }
  21.                 $comma_separated = implode("<br>", $weatherAll);
  22.                 print_r ($comma_separated);
  23.        

 

Powered by ExBB FM 1.0 RC1