Как исправить функцию вывода?

S
На сайте с 13.11.2012
Offline
72
1017

1. с помощью $js=file_get_contents получаю данные со стороннего сайта - title

2. далее, полученный title отправляю в поиск

3. получаю результат поиска

Проблема в том, что функция получив в ответ от $js=file_get_contents 2 и более title использует один и по нему выдает результат.

То есть, если в админке я создал 5 блоков (выведет 5 блоков с результатами на мой сайт)

то $js=file_get_contents будет обработана 5 раз, из-за чего несколько блоков на сайте могут быть одинаковыми, так как результаты выполнения пяти $js=file_get_contents частично могут быть одинаковыми (получим 5 title, 2 или 3 из которых могут быть идентичны), следовательно и на сайте будут повторы.

Как переписать или исправить мою функцию так, чтобы $js=file_get_contents выполнялась один раз и выводила столько блоков на сайте, сколько title было получено?

title ставится в поиск в строке $this->url --- q=".urlencode($itemtitle)."

protected function getcates($nom){

$part = "snippet";

$js=file_get_contents('https://glopart.ru/ads/adunit/4640/script.js');
if(preg_match('#push\((?<json>.*?)\);#',$js,$match)){
$wares=json_decode($match['json'])->wares;
foreach ($wares as $item) {

$itemtitle = $item->title;
$itemtitle = preg_replace('/[^\p{L}0-9 \!]/iu', ' ', $itemtitle);

}
}

$this->url = "https://www.googleapis.com/youtube/v3/search?key={$this->config["key"]}&part=$part&order=date&maxResults=4&q=".urlencode($itemtitle)."&videoEmbeddable=true&videoSyndicated=true&type=video";
$data = $this->http(TRUE);
$html = "";
foreach ($data->items as $yt) {
$html .= "РЕЗУЛЬТАТ РАБОТЫ ФУНКЦИИ {$yt->id->videoId}{$yt->snippet->title}";
}

if(!empty($html)){

$html = 'шапка блока'.$html.'футер блока';

}

return $html;
}

Попробовал изменить так:

protected function getcates($nom){

$part = "snippet";

$js=file_get_contents('https://glopart.ru/ads/adunit/4640/script.js');
if(preg_match('#push\((?<json>.*?)\);#',$js,$match)){
$wares=json_decode($match['json'])->wares;
$titles = [];
foreach ($wares as $item) {
$itemtitle = $item->title;
$itemtitle = preg_replace('/[^\p{L}0-9 \!]/iu', ' ', $itemtitle);
$titles[] = $itemtitle;
}
}
//$html = "";
foreach ($titles as $itemtitle) {
$this->url = "https://www.googleapis.com/youtube/v3/search?key={$this->config["key"]}&part=$part&order=date&maxResults=4&q=".urlencode($itemtitle)."&videoEmbeddable=true&videoSyndicated=true&type=video";
$data = $this->http(TRUE);
$html = "";
foreach ($data->items as $yt) {
$html .= "РЕЗУЛЬТАТ РАБОТЫ ФУНКЦИИ {$yt->id->videoId}{$yt->snippet->title}";
}
}

if(!empty($html)){

$html = 'шапка блока'.$html.'футер блока';

}
return $html;
}

Не помогло, повторы не пропали и страница стала в трое дольше грузиться, хотя должна ускориться.

Помогите пожалуйста, очень надо но я не осилю 100% :(

SocFishing
На сайте с 26.09.2013
Offline
118
#1

Если я верно понял, то

//$html = "";
foreach ($titles as $itemtitle) {

где-то перед этим вставьте http://php.net/manual/ru/function.array-unique.php убрать не уникальные title

★Сервис идентифицирует (https://socfishing.com/?utm_source=searchengines) посетителей вашего сайта и предоставляет их профили ВКонтакте, Телефон, Почта! Цены копеечные, работаем 8 лет.
S
На сайте с 13.11.2012
Offline
72
#2

Спасибо! Попробую.

Но это наверное не совсем то, так я с помощью array_uniqu уберу повторы но запросов к $js=file_get_contents останется 5, хотелось бы сократить до одного.

---------- Добавлено 05.03.2017 в 11:12 ----------

Повторы тоже не уберутся, т.к. array_uniqu будет проверять каждый запрос $js=file_get_contents

а $js=file_get_contents выдает результат без повторов.

Повторы появляются в результате обработки пяти $js=file_get_contents, вот я и хочу выполнить один раз $js=file_get_contents и вывести результат на основе получеyных в нем title

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий