0

我正在尝试编写一个函数来计算图像,同时在一个案例中循环遍历文件(在许多情况下),我$imageCount在函数中声明了全局变量,copyInsertImage以便在图像成功插入数据库后,我执行$imageCount++.

处理完案例的所有图像后,代码退出循环,processImages再次调用该函数。但是,var_dump($imageCount)每次图像计数增加一时,我都会打印出图像计数,并发现在$imageCount = 0为新案例运行循环时,它从未重置回 0。

我想知道声明global $imageCount是否与它有关,因为在将相同的脚本分组为函数之前代码之前工作正常。如果是这样,解决方案是什么?

谢谢!

function processImages($path,$patientID,$caseID)
{
    // $path = rootDirectory/patientID
    global $targetDirectory;
    $targetPath = $targetDirectory.$patientID;



    $caseSummaryFolder = $path."/".$caseID."/Summary";
    $srcDirPath=$path."/".$caseID."/Summary/slicesdir"; //AKA src
    $dstDirPath = $targetPath."/".$caseID;
    //copyCaseImages($caseSummaryFolder,$targetCasePath,$patientID,$caseID);

    global $status;
    // print("processImages case path:".$casePath."</br>");
    $files = glob($srcDirPath."/*.png");

    echo "\n------------NEW CASE------------\n"
    echo "PATIENT: $patientID \n";
    echo "CASE: $caseID \n";
    echo "--------------------------------\n"

    $imageCount = 0;
    for($i = 0; $i < count($files); $i++) {
        $file = $files[$i];
        $fileName = str_ireplace($srcDirPath."/", "", $file);
        // if image name doesn't not contain string 'GROT'
        if(strripos($fileName, "grot") === false)
        {
            if(doesImgExist($fileName)!==NULL) {
                if (compareFileMTime($srcDirPath,$fileName,doesImgExist($fileName))) {
                    echo "There's a newer version of $fileName \n";
                    copyInsertImage($srcDirPath,$dstDirPath,$fileName,$patientID,$caseID);
                }
                else {
                    $imageCount++;
                }
            }
            // copy image to analyzedCp and insert new image into DB
            else {
                copyInsertImage($srcDirPath,$dstDirPath,$fileName,$patientID,$caseID);

            }
        }   
        else {
            echo "grot*.png files are not included \n";
        }

    }
4

2 回答 2

1

如果我正确理解了您的问题,您似乎在“copyInsertImage”函数中重新声明了“global $imageCount”,并且该函数是 for 循环的一部分。如果这确实是您所遇到的问题,那么问题是,当您的 for 循环遇到“copyInsertImage”函数时,它将重新声明 $imageCount,此重新声明将使 imageCount 成为一个新变量并清除您存储的任何内容它。这可能是您看到 $imageCount = 0 的原因。

于 2013-08-16T15:20:48.257 回答
0

@andrewsi 回答了我的问题。

我的问题也通过将初始 $imageCount 声明为全局来解决。

“如果您使用全局变量,则需要在使用它们的每个函数中将它们声明为全局变量。否则,您最终会使用同名的局部变量。这是尽可能避免使用它们的原因之一 -在需要时将变量传递给函数会更容易。”

谢谢!

于 2013-08-16T15:48:45.283 回答