цикл while — php & quot; продолжить & quot; казалось бы, не работает

У меня есть скрипт, который просматривает каждое имя файла в каталоге и удаляет ненужные файлы. Сумма других вещей, это совпадает с именами файлов в файле CSV, а затем удаляет файл в соседней ячейке.

<?php
$gameList = trim(shell_exec("ls -a -1 -I . -I .. -I Removed"));
$gameArray = explode("\n", $gameList);

shell_exec('mkdir -p Removed');

echo "\033[01;32m\n\n<<<<<<<<<<Starting Scan>>>>>>>>>>\n\n";

// Do the magic for every file
foreach ($gameArray as $thisGame)
{
// Ensure continue if already removed
if (!$thisGame) continue;
if (!file_exists($thisGame)) continue;

// Manipulate names to look and play nice
$niceName = trim(preg_replace('%[\(|\[].*%', '', $thisGame));
$thisGameNoExtension = preg_replace('/\.' . preg_quote(pathinfo($thisGame, PATHINFO_EXTENSION) , '/') . '$/', '', $thisGame);

// Let the user know what game is being evaluated
echo "\033[00;35m{$thisGameNoExtension} ... ";

$f = fopen("ManualRegionDupes.csv", "r");
while ($row = fgetcsv($f))
{
if ($row[1] == $thisGameNoExtension)
{
$primaryFile = $row[0];

$ext = pathinfo($thisGame, PATHINFO_EXTENSION);
$fCheck = trim(shell_exec("ls -1 " . escapeshellarg($primaryFile) . "." . escapeshellarg($ext) . " 2>/dev/null"));
if ($fCheck)
{
echo "ECHO LION";
shell_exec("mv " . escapeshellarg($thisGame) . " Removed/");
continue;
}
else
{
echo "ECHO ZEBRA";
continue;
}

break;
}
}
fclose($f);

echo "Scanned and kept";
}
echo "\033[01;32m\n<<<<<<<<<<Process Complete>>>>>>>>>>\n\n";

?>

Это работает, однако я не понимаю, почему я вижу финальное эхо «Отсканировано и сохранено» сразу после «ECHO ZEBRA» или «ECHO LION» — так как у меня сразу после них «продолжаются» вызовы, которые должны перезапустить цикл и перейдите к следующему файлу. Я уверен, что мне просто нужно что-то перенастроить, но я возился часами и совершенно ошеломлен. Я был бы очень признателен за любую помощь! Большое спасибо!

3

Решение

continue просто работает для внутреннего цикла, который читает отдельные строки. Если вы хотите пропустить до конца внешнего цикла, вам нужно будет использовать …

continue 2;

Это позволяет вам сказать, продолжить для 2 уровней цикла.

4

Другие решения

У вас нет ничего, кроме перерыва после ваших дальнейших звонков, что еще он будет работать? Отредактируйте, если вы хотите продолжить во внешнем цикле, переместите его туда. Почему downvote, продолжение просто в неправильном цикле.

0