Привет всем, возник вопрос реально смешать новости и вывести их по дате(вместе.) я получаю новости вк так Код (PHP): $wall = file_get_contents("https://api.vk.com/method/wall.get?owner_id=-58395417&count=10&filter=owner&extended=1&v=5.62"); // Отправляем запрос $wall = json_decode($wall); // Преобразуем JSON-строку в массив $wall = $wall->response->items; // Получаем массив комментариев for ($i = 0; $i < count($wall); $i++) { echo "<p><b>".($i + 1)."</b>. <i>".$wall[$i]->text."</i><br /><span>".date("Y-m-d H:i:s", $wall[$i]->date)."</span></p>"; // Выводим записи Мне надо смешать с новостями из базы данных, и вывести их по порядку(дата). Реально ли? если да то как?
новости из базы в каком формате выбираются? по сути просто юзаешь array_merge для двух массивов потом прогоняешь через usort() дай код, который получает новости из базы
Спасибо большое. Код (PHP): $connect_to_db = mysql_connect($db_host, $db_username, $db_password) or die("Could not connect: " . mysql_error()); mysql_select_db($db_name, $connect_to_db) or die("Could not select DB: " . mysql_error()); $qr_result = mysql_query("select * from " . $db_table_to_show) or die(mysql_error()); while($data = mysql_fetch_array($qr_result)){ echo '<td>' . $data['short_story'] . '</td>'; echo '<td>' . $data['date'] . '</td>'; }
Сделал так, но выводит всего по 1 новости. Подскажите) Код (PHP): $db_host = 'localhost'; $db_name = '123'; $db_username = '123'; $db_password = '321'; $db_table_to_show = 'dle_post'; $connect_to_db = mysql_connect($db_host, $db_username, $db_password) or die("Could not connect: " . mysql_error()); mysql_select_db($db_name, $connect_to_db) or die("Could not select DB: " . mysql_error()); $qr_result = mysql_query("select * from " . $db_table_to_show) or die(mysql_error()); while($data = mysql_fetch_array($qr_result)){ $date = $data['date']; $array1 = array("text" => "{$data['short_story']}", "date" => "{$date}"); } mysql_close($connect_to_db); $wall = file_get_contents("https://api.vk.com/method/wall.get?owner_id=-58395417&count=10&filter=owner&extended=1&v=5.62"); // Отправляем запрос $wall = json_decode($wall); // Преобразуем JSON-строку в массив $wall = $wall->response->items; // Получаем массив комментариев for ($i = 0; $i < count($wall); $i++) { $dateVK = date('Y-m-d H:i:s', $wall[$i]->date); $array2 = array("textVK" => "{$wall[$i]->text}", "dateVK" => "{$dateVK}"); } $result = array_merge($array1, $array2); print_r($result);
PHP: $aDBNews = []; while($data = mysql_fetch_array($qr_result)){ $data['date'] = strtotime($data['date']); $aDBNews[] = $data; } $aNews = array_merge($aDBNews, $wall); usort($aNews, function($aItem1, $aItem2){ return (($aItem1['date'] < $aItem2['date']) ? -1 : (($aItem1['date'] == $aItem2['date']) ? 0 : 1)) ; }); foreach($aNews as $aItem){ //чототам с выводом } ну примерно так, код не тестил
Вот код без array. Я убрал все. кроме того что было сначало. Вставил ваш код Parse error: syntax error, unexpected '[' in /home/u30565/zoomcraft.ru/tests.php on line 27 27 строка = $aDBNews = []; Код (PHP): $db_host = 'localhost'; $db_name = '123'; $db_username = '123'; $db_password = '123'; $db_table_to_show = 'dle_post'; $connect_to_db = mysql_connect($db_host, $db_username, $db_password) or die("Could not connect: " . mysql_error()); mysql_select_db($db_name, $connect_to_db) or die("Could not select DB: " . mysql_error()); $qr_result = mysql_query("select * from " . $db_table_to_show) or die(mysql_error()); while($data = mysql_fetch_array($qr_result)){ echo '<td>' . $data['short_story'] . '</td>'; echo '<td>' . $data['date'] . '</td>'; } mysql_close($connect_to_db); $wall = file_get_contents("https://api.vk.com/method/wall.get?owner_id=-58395417&count=10&filter=owner&extended=1&v=5.62"); // Отправляем запрос $wall = json_decode($wall); // Преобразуем JSON-строку в массив $wall = $wall->response->items; // Получаем массив комментариев for ($i = 0; $i < count($wall); $i++) { echo "<p><b>".($i + 1)."</b>. <i>".$wall[$i]->text."</i><br /><span>".date("Y-m-d H:i:s", $wall[$i]->date)."</span></p>"; // Выводим записи }
ты немного не понял во первых насчет $wall преобразовываешь ты его не в массив, а в объект чтобы был массив делаешь так PHP: $wall=json_decode($wall, true); и дальше получаешь значения не так: PHP: $wall[$i]->text а так: PHP: $wall[$i]['text'] в первом блоке ты получаешь список новостей из ВК $wall во втором блоке вместо PHP: while($data = mysql_fetch_array($qr_result)){ echo '<td>' . $data['short_story'] . '</td>'; echo '<td>' . $data['date'] . '</td>'; } ставишь мой код PHP: $aDBNews = []; while($data = mysql_fetch_array($qr_result)){ $data['date'] = strtotime($data['date']); $aDBNews[] = $data; } $aDBNews тут это список новостей из базы если выскакивает ошибка syntax error, unexpected '[' in /home/u30565/zoomcraft.ru/tests.php on line 27 значит $aDBNews = []; заменяешь на $aDBNews = array(); далее по логике у нас есть 2 массива с новостям $wall и $aDBNews их нужно слить делаешь это одной строчкой PHP: $aNews=array_merge($aDBNews,$wall); $aNews это общий список новостей, еще не отсортирован затем нужно отсортировать новости также делается простой конструкцией PHP: usort($aNews, function($aItem1, $aItem2){ return (($aItem1['date'] < $aItem2['date']) ? -1 : (($aItem1['date'] == $aItem2['date']) ? 0 : 1)) ; }); $aNews - отсортированный массив новостей далее делаешь тупо PHP: foreach($aNews as $aItem){ echo '<p>' . $aItem['text'] . '</p>'; } и всё заведется.
Пусто..Ничего не выводит Код (PHP): $wall = file_get_contents("https://api.vk.com/method/wall.get?owner_id=-58395417&count=10&filter=owner&extended=1&v=5.62"); // Отправляем запрос $wall=json_decode($wall, true); $wall = $wall->response->items; // Получаем массив комментариев for ($i = 0; $i < count($wall); $i++) { echo "<p><b>".($i + 1)."</b>. <i>".$wall[$i]['text']."</i><br /><span>".date("Y-m-d H:i:s", $wall[$i]['date'])."</span></p>"; // Выводим записи }
PHP: <?php $db_host = 'localhost'; $db_name = '2'; $db_username = '2'; $db_password = '3'; $db_table_to_show = 'dle_post'; $connect_to_db = mysql_connect($db_host, $db_username, $db_password) or die("Could not connect: " . mysql_error()); mysql_select_db($db_name, $connect_to_db) or die("Could not select DB: " . mysql_error()); $qr_result = mysql_query("select * from " . $db_table_to_show . " ORDER BY date ASC") or die(mysql_error()); $aDBNews = array(); while($data = mysql_fetch_array($qr_result)){ $data['date'] = strtotime($data['date']); $aDBNews[] = $data; } mysql_close($connect_to_db); $wall = file_get_contents("https://api.vk.com/method/wall.get?owner_id=-58395417&count=10&filter=owner&extended=1&v=5.62"); // Отправляем запрос $wall=json_decode($wall, true); $wall = $wall->response->items; // Получаем массив комментариев for ($i = 0; $i < count($wall); $i++) { echo "<p><b>".($i + 1)."</b>. <i>".$wall[$i]['text']."</i><br /><span>".date("Y-m-d H:i:s", $wall[$i]['date'])."</span></p>"; // Выводим записи } $aNews=array_merge($aDBNews,$wall); usort($aNews, function($aItem1, $aItem2){ return (($aItem1['date'] < $aItem2['date']) ? -1 : (($aItem1['date'] == $aItem2['date']) ? 0 : 1)) ; }); foreach($aNews as $aItem){ echo '<p>' . $aItem['text'] . '</p>'; } ?> Warning: array_merge() [function.array-merge]: Argument #2 is not an array in /home/u30565/zoomcraft.ru/tests.php on line 24 Warning: usort() expects parameter 1 to be array, null given in /home/u30565/zoomcraft.ru/tests.php on line 27 Warning: Invalid argument supplied for foreach() in /home/u30565/zoomcraft.ru/tests.php on line 28
Спасибо. нужно в другую сторону теперь. И возможно ли добавить цифру 1 в начале всех новостей с вк цифру 2 в начале всех новостей из бд?
1)Новые новости внизу списка у меня появляются. 2)Хочу Картинки вставить VK - ВК, а для сайта домик. По этому хочу разделить --- Добавлено --- Спасибо, было бы лучше. если бы финансовые проблемы не настигли! Диз. Лаунчера) https://yadi.sk/i/Xj4e4MHh3AjBGH
перед: PHP: $aNews=array_merge($aDBNews,$wall); вставь такой код: PHP: $wall = array_map(function($aItem){ $aItem['type'] = 2; return $aItem; }, $wall); $aDBNews= array_map(function($aItem){ $aItem['type'] = 1; return $aItem; }, $aDBNews); а там где выводишь все новости: PHP: foreach($aNews as $aItem){ echo '<p>' . $aItem['text'] . '</p>'; } просто добавь вывод $aItem['type']; и удали наконец этот код: PHP: for ($i = 0; $i < count($wall); $i++) { echo "<p><b>".($i + 1)."</b>. <i>".$wall[$i]['text']."</i><br /><span>".date("Y-m-d H:i:s", $wall[$i]['date'])."</span></p>"; // Выводим записи } он уже ненужен, весь вывод делай из общего списка
Спасибо, было бы лучше. если бы финансовые проблемы не н Плюс с сайта не вывелись новости --- Добавлено --- скорее всего потому что в базе не text а short_story. Где изменить?
ты в этом коде напиши вывод новостей: PHP: foreach($aNews as $aItem){ echo '<p>' . $aItem['text'] . '</p>'; } у тебя же поле text есть только для контактовских новостей, для своих для этого юзай поле short_story тем более type уже указали
Ага. заработало. Только из вк не взялись последние новости. за 2017 год. +Надо перевернуть 2017 год новости внизу страницы. http://zoomcraft.ru/tests.php PHP: <?php $db_host = 'localhost'; $db_name = '2'; $db_username = '3'; $db_password = '321'; $db_table_to_show = 'dle_post'; $connect_to_db = mysql_connect($db_host, $db_username, $db_password) or die("Could not connect: " . mysql_error()); mysql_select_db($db_name, $connect_to_db) or die("Could not select DB: " . mysql_error()); $qr_result = mysql_query("select * from " . $db_table_to_show . " ORDER BY date DESC limit 5") or die(mysql_error()); $aDBNews = array(); while($data = mysql_fetch_array($qr_result)){ $data['date'] = strtotime($data['date']); $aDBNews[] = $data; } mysql_close($connect_to_db); $wall = file_get_contents("https://api.vk.com/method/wall.get?owner_id=-58395417&count=10&filter=owner&extended=1&v=5.62"); // Отправляем запрос $wall=json_decode($wall, true); $wall = $wall['response']['items']; $wall = array_map(function($aItem){ $aItem['type'] = 2; return $aItem; }, $wall); $aDBNews= array_map(function($aItem){ $aItem['type'] = 1; return $aItem; }, $aDBNews); $aNews=array_merge($aDBNews,$wall); usort($aNews, function($aItem1, $aItem2){ return (($aItem1['date'] < $aItem2['date']) ? -1 : (($aItem1['date'] == $aItem2['date']) ? 0 : 1)) ; }); foreach($aNews as $aItem){ echo $aItem['type']; echo '<p>' . $aItem['text'] . '</p>'; echo '<p>' . $aItem['short_story'] . '</p>'; $date = date("Y-m-d H:i:s", $aItem['date']); echo '<p>' . $date . '</p>'; } ?>
Ага спасибо. Получилось так PHP: <?php $db_host = 'localhost'; $db_name = '2'; $db_username = '3'; $db_password = '4'; $db_table_to_show = 'dle_post'; $connect_to_db = mysql_connect($db_host, $db_username, $db_password) or die("Could not connect: " . mysql_error()); mysql_select_db($db_name, $connect_to_db) or die("Could not select DB: " . mysql_error()); $qr_result = mysql_query("select * from " . $db_table_to_show . " ORDER BY date DESC limit 5") or die(mysql_error()); $aDBNews = array(); while($data = mysql_fetch_array($qr_result)){ $data['date'] = strtotime($data['date']); $aDBNews[] = $data; } mysql_close($connect_to_db); $wall = file_get_contents("https://api.vk.com/method/wall.get?owner_id=-58395417&count=10&filter=owner&extended=1&v=5.62"); // Отправляем запрос $wall=json_decode($wall, true); $wall = $wall['response']['items']; $wall = array_map(function($aItem){ $aItem['type'] = 2; return $aItem; }, $wall); $aDBNews= array_map(function($aItem){ $aItem['type'] = 1; return $aItem; }, $aDBNews); $aNews=array_merge($aDBNews,$wall); usort($aNews, function($aItem1, $aItem2){ return (($aItem1['date'] < $aItem2['date']) ? 1 : (($aItem1['date'] == $aItem2['date']) ? 0 : -1)) ; }); foreach($aNews as $aItem){ $date = date("Y-m-d H:i:s", $aItem['date']); echo $aItem['type'] . ' ' . $aItem['text'] . $aItem['short_story'] . '<br>' . $date . '<br>'; } ?>
Еще вопросик закешировать. Нашел способ PHP: $cachefile = 'news.html'; $cachetime = 18000; // Обслуживается из файла кеша, если время запроса меньше $cachetime if (file_exists($cachefile) && time() - $cachetime < filemtime($cachefile)) { include($cachefile); exit; } ob_start(); // Запуск буфера вывода CODE $cached = fopen($cachefile, 'w'); fwrite($cached, ob_get_contents()); fclose($cached); ob_end_flush(); // Отправялем вывод в браузер Но выводит только новости сайта..