Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

php "continue" seemingly not working [duplicate]

I have a script which goes through every filename in a directory and removes unwanted files. Amount other things, it matches filenames in a CSV file and then removes a file in an adjacent cell.

<?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";

?>

It's working, however I don't understand why I am seeing the final echo "Scanned and Kept" straight after either "ECHO ZEBRA" or "ECHO LION" - as I have "continue" calls straight after them, which should restart the loop and move on to the next file. I'm sure I just need to re-jig something somewhere, but I've been fiddling for hours and I'm completely stumped. I'd be super greatful for any help! Many thanks!

like image 218
UnluckyForSome9 Avatar asked Dec 01 '25 01:12

UnluckyForSome9


1 Answers

The continue is just working for the inner loop which is reading the individual lines. If you want to skip to the end of the outer loop, you will need to use...

continue 2;

This allows you to say continue for 2 levels of loop.

like image 103
Nigel Ren Avatar answered Dec 02 '25 16:12

Nigel Ren



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!