bokovua
@bokovua
Любитель

Как сделать вложенный цикл foreach в for?

Не обессудьте) Только вникаю в язык.

Создаю в папке с помощью цикла for документы с разным наполнением. Это наполнение подтягивают из json.
Все отлично работает, но когда дело доходит до того момента, когда из json нужно перебрать массивом данные, скрипт останавливает работу. Как выполнить foreach внутри for?

<?

// строка, которую будем записывать
$file = file_get_contents("https://protectorat.cc/api/movies_updates.json?api_token=fa64680c5213b5f16d789133afce4137");
$json = json_decode($file);


for($i=0;$i<=2;$i++)
{
$text = '
<div class="mainblock" id="'.$i. '" style="margin-top: 30px; ">
<div class="film">
	<div class="title_ru">
	<p>'.$json->updates[$i]->title_ru. '</p>
	</div>
	<div class="title_en">
	<p>'.$json->updates[$i]->title_en. '</p>
	</div>
	<div class="year">
	<p>'.$json->updates[$i]->year. '</p>
	</div>
	<div class="duration">
	<p>'.$json->updates[$i]->duration->human. '</p>
	</div>
	<div class="kinopoisk_id">
	<p>'.$json->updates[$i]->kinopoisk_id. '</p>
	</div>
	<div class="token">
	<p>'.$json->updates[$i]->token. '</p>
	</div>
	<div class="source_type">
	<p>'.$json->updates[$i]->source_type. '</p>
	</div>
	<div class="iframe_url">
	<p>'.$json->updates[$i]->iframe_url. '</p>
	</div>
	<div class="translator">
	<p>'.$json->updates[$i]->translator. '</p>
	</div>
	<div class="added_at">
	<p>'.$json->updates[$i]->added_at. '</p>
	</div>

<div class="material_data_country">'; ?>
	<? foreach ($json->updates[$i]->material_data->countries as $countriess) { ?>
	<?  '<span class="countriess" style="display:inline-block;">'.$countriess.'</span>,';?>
		<? } ';

$fp = fopen("empty$i.html", "w");
fwrite($fp, $text);
fclose($fp);

}
?>
  • Вопрос задан
  • 179 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Narts
У вас проблема в том, что не у каждого объекта есть material_data. Нужно поставить проверку на isset, и в случае true уже запускать цикл foreach

$file = file_get_contents("https://protectorat.cc/api/movies_updates.json?api_token=fa64680c5213b5f16d789133afce4137");
		$json = json_decode($file);


		for($i = 0; $i <= 2; $i++)
		{

			$text = '
			<div class="mainblock" id="'.$i. '" style="margin-top: 30px; ">
			<div class="film">
			<div class="title_ru">
			<p>'.$json->updates[$i]->title_ru. '</p>
			</div>
			<div class="title_en">
			<p>'.$json->updates[$i]->title_en. '</p>
			</div>
			<div class="year">
			<p>'.$json->updates[$i]->year. '</p>
			</div>
			<div class="duration">
			<p>'.$json->updates[$i]->duration->human. '</p>
			</div>
			<div class="kinopoisk_id">
			<p>'.$json->updates[$i]->kinopoisk_id. '</p>
			</div>
			<div class="token">
			<p>'.$json->updates[$i]->token. '</p>
			</div>
			<div class="source_type">
			<p>'.$json->updates[$i]->source_type. '</p>
			</div>
			<div class="iframe_url">
			<p>'.$json->updates[$i]->iframe_url. '</p>
			</div>
			<div class="translator">
			<p>'.$json->updates[$i]->translator. '</p>
			</div>
			<div class="added_at">
			<p>'.$json->updates[$i]->added_at. '</p>
			</div>

			<div class="material_data_country">';


			if(isset($json->updates[$i]->material_data)){
				foreach ($json->updates[$i]->material_data->countries as $countriess) {
					echo $countriess;
				}
			}

			$fp = fopen("empty$i.html", "w");
			fwrite($fp, $text);
			fclose($fp);

		}


spoiler

Вообще, я бы посоветовал декодировать файл с аргументом true:
$json = json_decode($file, true);
, чтобы на выходе получить ассоциативный массив
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы