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

275
06 марта 2017, 13:16
  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)."

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

 protected function getcates($nom){
 $part = "snippet"; 
 $js=file_get_contents('сайт.ру/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('сайт.ру//…'); 
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; 
}
Answer 1

У вас проблема в бесполезном цикле:

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

Обрабатывается только последний title.

Нужно весь код по обработке этого title добавить внутрь цикла, либо собрать их в массив и потом итерировать.

Например, так:

$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"; 
  $html .= "...";
  // ...
}

Думаю очевидно, что в этом конкретном случае можно не собирать массив, а генерировать блоки прямо в первом цикле.

READ ALSO
header(&#39;Location:&#39;) не перенаправляет

header('Location:') не перенаправляет

Если кратко то есть функция

258
Как правильно сделать условие и запрос к БД?

Как правильно сделать условие и запрос к БД?

Подскажите, пожалуйста, как сделать, чтобы правильно заносились данные, а то 5 раз повторяетсяНужно, чтобы при пополнении от определенной...

232
Как работает запись if($var){ &hellip; } или if(!$var){ &hellip; }?

Как работает запись if($var){ … } или if(!$var){ … }?

Друзья всем привет!!! помогите разобраться раз и навсегда с этой записью, до сих пор сильно путаюсь, благодарю вас заранее

284