PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

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

> Найдено сообщений: 12
njuha Отправлено: 11 Апреля, 2017 - 08:30:05 • Тема: Вывод массива в переменную • Форум: Вопросы новичков

Ответов: 1
Просмотров: 218
Я долго копался в мануалах и кое-что нашёл.
Мне удалось частично решить задачу:
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.        
njuha Отправлено: 11 Апреля, 2017 - 04:50:27 • Тема: Вывод массива в переменную • Форум: Вопросы новичков

Ответов: 1
Просмотров: 218
Доброе время суток.

Для выполнения некоторых задумок приходится изменять/дописывать 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 по очереди, отформатировать и запихнуть в единую переменную и переменную уже передать в шаблон. К сожалению я не знаю, как подобное осуществить и куда рыть.

Помогите решить проблему, пожалуйста.
njuha Отправлено: 23 Марта, 2014 - 21:26:17 • Тема: Поиск в базе по словосочетанию. • Форум: SQL и Архитектура БД

Ответов: 9
Просмотров: 53

Да, точно. Идеально.
Большое спасибо.
njuha Отправлено: 23 Марта, 2014 - 21:10:06 • Тема: Поиск в базе по словосочетанию. • Форум: SQL и Архитектура БД

Ответов: 9
Просмотров: 53
3d_killer пишет:
весь запрос пожалуйста

А, сорри, всё разобрался. Говорю же, голова кипит)))

У меня в поиск вбивается:
Перепутанные, 3 сезон
Ну и запрос вешается:
OR post_subject LIKE '% 3 сезон%' AND forum_id = '16'
Пробел не ищет, надо пробелы после знаков препинания удалить, регулярными да?
njuha Отправлено: 23 Марта, 2014 - 21:02:39 • Тема: Поиск в базе по словосочетанию. • Форум: SQL и Архитектура БД

Ответов: 9
Просмотров: 53
3d_killer пишет:
и сам запрос
(Добавление)
смотрите ваши кодировки перекодировки LIKE написан верно

Убрал перекодировку, вышло:
post_subject LIKE '%Перепутанные%' AND forum_id = '16' OR post_subject LIKE '% 3 сезон%' AND forum_id = '16'

Не находит.

3d_killer пишет:
а и что такое это
после LIKE

Пустая переменная. Не знаю от куда взялась, может забыл удалить.
njuha Отправлено: 23 Марта, 2014 - 20:26:23 • Тема: Поиск в базе по словосочетанию. • Форум: SQL и Архитектура БД

Ответов: 9
Просмотров: 53
3d_killer пишет:
для такого поиска уж больно запрос большой, convert вобще тут зачем?
(Добавление)
кодировку же в подключении указать можно
PHP:
скопировать код в буфер обмена
  1. $DBH->query("SET NAMES 'utf8'");

У меня его цикл составляет. Да и разница, мой вопрос сокращение запроса не решает)))
njuha Отправлено: 23 Марта, 2014 - 20:03:56 • Тема: Поиск в базе по словосочетанию. • Форум: SQL и Архитектура БД

Ответов: 9
Просмотров: 53
Здравствуйте.
Не знаю, к вечеру голова загудела, или что... Но не могу решить задачу (гогль тоже не помог).

В базе данных в столбце x записи:
3 сезон: 1-7 серия из 21 / 2014 / WEB-DLRip (720p)
3 сезон: 1-7 серия из 21 / 2014 / WEB-DLRip
2 сезон: 1-21 серия из 21 / 2013 / WEB-DLRip (720p)
2 сезон: 1-21 серия из 21 / 2013 / WEB-DLRip

В поиск вбиваю:
Название, 3 сезон, трам трам трам

Мой скрипт разделяет поисковой запрос по запятым и ищет в базе.
То-есть он ищет:

SELECT * FROM phpbb_posts WHERE forum_id = '$forum_id' AND (CONVERT( `post_subject` USING utf8 ) LIKE '%Название%' $forun_id_sql AND forum_id = '$forum_id' OR (CONVERT( `post_subject` USING utf8 ) LIKE '%3 сезон%' $forun_id_sql AND forum_id = '$forum_id' OR (CONVERT( `post_subject` USING utf8 ) LIKE '%Название%' $forun_id_sql AND forum_id = 'трам трам трам')

Мне нужно, чтобы он находил только:
3 сезон: 1-7 серия из 21 / 2014 / WEB-DLRip (720p)
3 сезон: 1-7 серия из 21 / 2014 / WEB-DLRip
в поиск ведь вбили "3 сезон"

А он находит все 4 записи потому, что во всех записях присутствует цифра 3.

% вроде убирать пробовал.

Кто подскажет? Спасибо ;)
njuha Отправлено: 27 Мая, 2012 - 19:47:31 • Тема: Как посчитать количество оставшихся дней до определённой даты? • Форум: Хранение данных, их вывод и обработка

Ответов: 9
Просмотров: 9902
Мелкий пишет:
А точно. Не забыть бы завтра на работе проверить, не наглючил ли так же Закатив глазки

PHP:
скопировать код в буфер обмена
  1. $datetime1 = new DateTime('14.08.2012');
  2. $datetime2 = new DateTime('27.05.2012');
  3. $interval = $datetime2->diff($datetime1);
  4. echo $interval->days;

Спасибо. Всё оказалось значительно проще)))

LIME, а?
njuha Отправлено: 27 Мая, 2012 - 19:00:46 • Тема: Как посчитать количество оставшихся дней до определённой даты? • Форум: Хранение данных, их вывод и обработка

Ответов: 9
Просмотров: 9902
Мелкий пишет:
PHP:
скопировать код в буфер обмена
  1. $datetime1 = new DateTime('14.06.2012');
  2. $datetime2 = new DateTime('27.05.2012');
  3. $interval = $datetime2->diff($datetime1);
  4. $int = $interval->d;
  5. echo abs($int);

(Добавление)
njuha пишет:
Считает как будто соседние месяцы...

Дык соседние же и есть Однако

Голливудская улыбка
Эт я не очень удачный пример привёл))
Вот, дата выхода:
09.07.2012

Выдаёт:
Осталось дней: 12
njuha Отправлено: 27 Мая, 2012 - 18:16:41 • Тема: Как посчитать количество оставшихся дней до определённой даты? • Форум: Хранение данных, их вывод и обработка

Ответов: 9
Просмотров: 9902
Мелкий пишет:
Удобная форма для машинной обработки.

Не получается...

Вот скриптик:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <?
  3. $start_date = "14.06.2012";
  4. $today_date = "27.05.2012";
  5. $start_date_elements  = explode(".",$start_date);
  6. $today_date_elements  = explode(".",$today_date);
  7. $start_date_mk = mktime(0,0,0,$start_date_elements[1],$start_date_elements[0],$start_date_elements[2]) / 24*60*60;
  8. $today_date_mk = mktime(0,0,0,$today_date_elements[1],$today_date_elements[0],$today_date_elements[2]) / 24*60*60;
  9.                                        
  10. $datetime1 = $start_date_mk;
  11. $datetime2 = n$today_date_mk;
  12. $interval = $datetime2->diff($datetime1);
  13. $int = $interval->format('%R%d<br>');
  14. echo abs($int);                                
  15.                                         ?>
  16.  
  17.  

Возможно я не верно поделил, или вообще не так сделал...

Вот так по идее получилось:
CODE (htmlphp):
скопировать код в буфер обмена
  1. $datetime1 = new DateTime('14.06.2012');
  2. $datetime2 = new DateTime('27.05.2012');
  3. $interval = $datetime2->diff($datetime1);
  4. $int = $interval->format('%R%d<br>');
  5. echo abs($int);

Но месяца в расчёт не берутся. Считает как будто соседние месяцы...
njuha Отправлено: 27 Мая, 2012 - 01:53:11 • Тема: Как посчитать количество оставшихся дней до определённой даты? • Форум: Хранение данных, их вывод и обработка

Ответов: 9
Просмотров: 9902
Мелкий пишет:
0) переводите в unix time (mktime), потом делите на 24*60*60
1) http://ru.php.net/manual/en/datetime.diff.php

Спасибо.

Не могли бы вы пояснить ламеру, зачем переводить дату в unox time?
njuha Отправлено: 26 Мая, 2012 - 21:46:23 • Тема: Как посчитать количество оставшихся дней до определённой даты? • Форум: Хранение данных, их вывод и обработка

Ответов: 9
Просмотров: 9902
Есть определённая дата в формате день.месяц.год (например 14.06.2012). Нужно посчитать, сколько осталось дней до этой даты.
Желательно средствами PHP.

Я уже давно гуглю этот вопрос, но ничего того, чтобы мог понять не нашёл.
Надеюсь на вашу терпимость и помощь. Заранее спасибо Улыбка

Страниц (1): [1]
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB