php“继续”似乎不起作用

Posted

技术标签:

【中文标题】php“继续”似乎不起作用【英文标题】:php "continue" seemingly not working 【发布时间】:2018-07-13 17:08:04 【问题描述】:

我有一个脚本,它遍历目录中的每个文件名并删除不需要的文件。其他内容,它匹配 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”之后直接看到最终的回声“Scanned and Kept” - 因为我在它们之后直接有“继续”呼叫,这应该重新开始循环并继续下一个文件。我确定我只需要在某个地方重新调整一些东西,但我已经摆弄了几个小时,我完全被难住了。我会非常感激任何帮助!非常感谢!

【问题讨论】:

因为echo "Scanned and kept"; 在您所在的while 循环之外。当while 完成时,它会继续完成foreach 中剩下的内容。那个回声是什么。 另一个友好的建议:使用unlink,并在内置选项可用时尽量避免使用shell_execglobopendir / readdir)。 break 放在if 之后有什么意义?你永远不会到达那里,因为两个分支都包含continue @IncredibleHat 这就是我发表评论的原因。此外,如果您在 if 的两个分支中继续,您不妨将 continue 放在 if 之后。 @MatsLindh 他在哪里使用shell_exec() 删除文件?他用它来移动文件。正确的替换是rename() 【参考方案1】:

continue 仅适用于读取各行的内部循环。如果你想跳到外循环的末尾,你需要使用...

continue 2;

这允许你说 continue 进行 2 级循环。

【讨论】:

【参考方案2】:

在你的 continue 调用之后,你除了休息之外什么都没有,它还会运行什么?编辑,如果你想在外循环上继续,把它移到那里。 continue 只是在错误的循环中。

【讨论】:

以上是关于php“继续”似乎不起作用的主要内容,如果未能解决你的问题,请参考以下文章

等待似乎不起作用,异步(nodejs)

为啥easy-autocomplete在Rails 6上不起作用?

在 Ubuntu 12.04 LTS 中更新内核似乎不起作用

以编程方式继续不起作用

暂停游戏时,“继续”按钮不起作用

getElementsByTagName 似乎不起作用