Помогите в работе с вложенными циклами!

170
02 июля 2022, 04:10

Есть код:

for ($i=0;$i<2;$i++){ // основной цикл

for($z=0;$z<10;$z++) { //вложенный цикл
if($z==0) { $zapros.=' return {'; }
$zapros .=' "rst'.$z.'":API.photos.getAll({
"owner_id":"'.$friendsik->response->items[$k].'", 
"extended":"1",
"no_service_albums":"0",
"count":"30",
"photo_sizes":"1",
"skip_hidden":"0",
"v":"5.50"})';
if($z!=9) { $zapros .=','; }
else { $zapros.='};'; $ho=1; }
$k=$k+1;
}
$f = fopen("bot.txt", "a+");
fwrite($f,$zapros. "         " );
fclose($f);
}
return 0; // Пофиг что выводить
}

В данном фрагменте кода я создаю execute запрос к серверу вк. Дело в том что вложенный цикл должен создавать тело execute запроса а именно переменную code (для тех кто шарит в vk api). Собственно проблема в том что при первой итерации основного цикла, вложенный цикл создаёт переменную zapros как надо, а именно в текстовый документ записываветься вот это:

 return { "rst0":API.photos.getAll({
"owner_id":"232472393", 
"extended":"1",
"no_service_albums":"0",
"count":"30",
"photo_sizes":"1",
"skip_hidden":"0",
"v":"5.50"}), "rst1":API.photos.getAll({
"owner_id":"335121474", 
"extended":"1",
"no_service_albums":"0",
"count":"30",
"photo_sizes":"1",
"skip_hidden":"0",
"v":"5.50"}), "rst2":API.photos.getAll({
"owner_id":"149082318", 
"extended":"1",
"no_service_albums":"0",
"count":"30",
"photo_sizes":"1",
"skip_hidden":"0",
"v":"5.50"}), "rst3":API.photos.getAll({
"owner_id":"137529581", 
"extended":"1",
"no_service_albums":"0",
"count":"30",
"photo_sizes":"1",
"skip_hidden":"0",
"v":"5.50"}), "rst4":API.photos.getAll({
"owner_id":"139572580", 
"extended":"1",
"no_service_albums":"0",
"count":"30",
"photo_sizes":"1",
"skip_hidden":"0",
"v":"5.50"}), "rst5":API.photos.getAll({
"owner_id":"223138809", 
"extended":"1",
"no_service_albums":"0",
"count":"30",
"photo_sizes":"1",
"skip_hidden":"0",
"v":"5.50"}), "rst6":API.photos.getAll({
"owner_id":"273106404", 
"extended":"1",
"no_service_albums":"0",
"count":"30",
"photo_sizes":"1",
"skip_hidden":"0",
"v":"5.50"}), "rst7":API.photos.getAll({
"owner_id":"211408588", 
"extended":"1",
"no_service_albums":"0",
"count":"30",
"photo_sizes":"1",
"skip_hidden":"0",
"v":"5.50"}), "rst8":API.photos.getAll({
"owner_id":"599894772", 
"extended":"1",
"no_service_albums":"0",
"count":"30",
"photo_sizes":"1",
"skip_hidden":"0",
"v":"5.50"}), "rst9":API.photos.getAll({
"owner_id":"370411016", 
"extended":"1",
"no_service_albums":"0",
"count":"30",
"photo_sizes":"1",
"skip_hidden":"0",
"v":"5.50"})};

НО, при второй итерации основного цикла вложенный цикл выполняеться 2 раза, тоесть переменная zapros становиться равной:

return { "rst0":API.photos.getAll({
"owner_id":"232472393", 
"extended":"1",
"no_service_albums":"0",
"count":"30",
"photo_sizes":"1",
"skip_hidden":"0",
"v":"5.50"}), "rst1":API.photos.getAll({
"owner_id":"335121474", 
"extended":"1",
"no_service_albums":"0",
"count":"30",
"photo_sizes":"1",
"skip_hidden":"0",
"v":"5.50"}), "rst2":API.photos.getAll({
"owner_id":"149082318", 
"extended":"1",
"no_service_albums":"0",
"count":"30",
"photo_sizes":"1",
"skip_hidden":"0",
"v":"5.50"}), "rst3":API.photos.getAll({
"owner_id":"137529581", 
"extended":"1",
"no_service_albums":"0",
"count":"30",
"photo_sizes":"1",
"skip_hidden":"0",
"v":"5.50"}), "rst4":API.photos.getAll({
"owner_id":"139572580", 
"extended":"1",
"no_service_albums":"0",
"count":"30",
"photo_sizes":"1",
"skip_hidden":"0",
"v":"5.50"}), "rst5":API.photos.getAll({
"owner_id":"223138809", 
"extended":"1",
"no_service_albums":"0",
"count":"30",
"photo_sizes":"1",
"skip_hidden":"0",
"v":"5.50"}), "rst6":API.photos.getAll({
"owner_id":"273106404", 
"extended":"1",
"no_service_albums":"0",
"count":"30",
"photo_sizes":"1",
"skip_hidden":"0",
"v":"5.50"}), "rst7":API.photos.getAll({
"owner_id":"211408588", 
"extended":"1",
"no_service_albums":"0",
"count":"30",
"photo_sizes":"1",
"skip_hidden":"0",
"v":"5.50"}), "rst8":API.photos.getAll({
"owner_id":"599894772", 
"extended":"1",
"no_service_albums":"0",
"count":"30",
"photo_sizes":"1",
"skip_hidden":"0",
"v":"5.50"}), "rst9":API.photos.getAll({
"owner_id":"370411016", 
"extended":"1",
"no_service_albums":"0",
"count":"30",
"photo_sizes":"1",
"skip_hidden":"0",
"v":"5.50"})}; return { "rst0":API.photos.getAll({
"owner_id":"570372147", 
"extended":"1",
"no_service_albums":"0",
"count":"30",
"photo_sizes":"1",
"skip_hidden":"0",
"v":"5.50"}), "rst1":API.photos.getAll({
"owner_id":"232985818", 
"extended":"1",
"no_service_albums":"0",
"count":"30",
"photo_sizes":"1",
"skip_hidden":"0",
"v":"5.50"}), "rst2":API.photos.getAll({
"owner_id":"439280822", 
"extended":"1",
"no_service_albums":"0",
"count":"30",
"photo_sizes":"1",
"skip_hidden":"0",
"v":"5.50"}), "rst3":API.photos.getAll({
"owner_id":"324641024", 
"extended":"1",
"no_service_albums":"0",
"count":"30",
"photo_sizes":"1",
"skip_hidden":"0",
"v":"5.50"}), "rst4":API.photos.getAll({
"owner_id":"375950180", 
"extended":"1",
"no_service_albums":"0",
"count":"30",
"photo_sizes":"1",
"skip_hidden":"0",
"v":"5.50"}), "rst5":API.photos.getAll({
"owner_id":"313848521", 
"extended":"1",
"no_service_albums":"0",
"count":"30",
"photo_sizes":"1",
"skip_hidden":"0",
"v":"5.50"}), "rst6":API.photos.getAll({
"owner_id":"307850071", 
"extended":"1",
"no_service_albums":"0",
"count":"30",
"photo_sizes":"1",
"skip_hidden":"0",
"v":"5.50"}), "rst7":API.photos.getAll({
"owner_id":"156115157", 
"extended":"1",
"no_service_albums":"0",
"count":"30",
"photo_sizes":"1",
"skip_hidden":"0",
"v":"5.50"}), "rst8":API.photos.getAll({
"owner_id":"146257695", 
"extended":"1",
"no_service_albums":"0",
"count":"30",
"photo_sizes":"1",
"skip_hidden":"0",
"v":"5.50"}), "rst9":API.photos.getAll({
"owner_id":"201226959", 
"extended":"1",
"no_service_albums":"0",
"count":"30",
"photo_sizes":"1",
"skip_hidden":"0",
"v":"5.50"})};         

ПРИ третей итерации цикла вложенный цикл повторяется три раза, и я не могу понять почему это просходит и как это исправить, если по идеи внутренний цикл должен повторяться всего один раз. Помогите!!!!!!!

Answer 1

Во первых, вы сами добавляете в переменную $zapros новое содержимое, т.к. используете конкатенацию: $zapros.=' return {'; вместо $zapros=' return {';

Во вторых, вы пишете в файл в режиме a+, т.е. дозаписываете в файл новое содержимое переменной $zapros.

Решайте сами, что из этого лишнее.

Также, никто так не формирует json, это попросту неудобно.
Собирайте данные в массив, а потом вызывайте json_encode.
Опредённые сложности создаёт вызов js функции, но тем не менее.
Например, так:

$queries = [];
foreach ($rows as $key => $row) {
    $json = json_encode($row);
    $queries[] = "\"{$key}\": API.photos.getAll({$json})";
}
$json_entries = implode(",\n\t", $queries);
$zapros = "return {\n\t{$json_entries}\n};\n";
READ ALSO
Загрузка картинок с фронтенд в CS-CART

Загрузка картинок с фронтенд в CS-CART

Собственно следующая проблема, надо расширить модуль отзывов (которые о сайте в целом, не отзывы о товарах), добавить пару полей и возможность...

220
isset не работает

isset не работает

не выполняется условие с issetстатус с браузере 200, и все данные передаются

170
Генерация POST запроса с php curl в JSON формате

Генерация POST запроса с php curl в JSON формате

пытаюсь получить токен для api digiseller https://mydigiseller

179
modx ошибка 500 при открытии сайта

modx ошибка 500 при открытии сайта

Всех приветствую, при открытии сайта появляется белый экран и ошибка HTTP ERROR 500При этом админ панель открывается нормально

197