簡體   English   中英

如何僅在PHP函數中僅在頁面上回顯?

[英]How to echo only Once on Page in Function in PHP?

這是我的功能:

curl_setopt( $curl, CURLOPT_PROGRESSFUNCTION, function ( $resource, $download_size, $downloaded_size, $upload_size, $uploaded_size) use ($array)
{
static $previousProgress = 0;

    if ( $download_size == 0 ) {
        $progress = 0;
    } else {
        $progress = round( $downloaded_size * 100 / $download_size );
    }

如您所見,我將在函數末尾插入要use的變量。

我想做的就是在else條件之后僅回顯此行一次

echo ' ' . $progress . '%' . ' (' . bytes($downloaded_size) . ' of ' . bytes($download_size) . ') ';

我已經嘗試過諸如

static $previousProgress = 0;
$count = $previousProgress++;

    } else {
    if ($count == 1) { echo echo ' ' . $progress . '%' . ' (' . bytes($downloaded_size) . ' of ' . bytes($download_size) . ') '; }
        $progress = round( $downloaded_size * 100 / $download_size );
    }

但是,此時函數在達到else條件之前已經運行了未知次數(有時50次,有時60次)。

我當然可以做到

static $previousProgress = 0;
    $count = $previousProgress++;
    if ($count == 1) { echo ' ' . $progress . '%' . ' (' . bytes($downloaded_size) . ' of ' . bytes($download_size) . ') '; }

而且它只能回顯一次。.但是問題是CURL沒有設置$downloaded_size$download_size變量並顯示為0 bytes -因此它必須處於else條件。

我試過使用true / false變量,因為通常會在forforeach循環中一次輸出某些內容,但是由於該函數只是遞歸運行,直到超時,該函數又重新開始,因此不起作用。

就像我說的那樣,我可以在此函數中插入變量數組以幫助我...但是考慮到該函數重新啟動並每次都重新運行,我不確定如何做到這一點。

嘗試了其他隨機的東西,但是我顯然丟失了一些東西。 如何在重復功能中僅回顯一次下載大小?

靜態布爾變量應該執行您想要的操作。

static $firstTime = true;
if ($firstTime) {
    echo "something";
    $firstTime = false;
}

代碼的問題可能是因為您使用的是后增量。 如果$previousProgress0 ,則行:

$count = $previousProgress++;

$count設置$count 0 (舊值),同時將$previousProgress遞增為1 因此, if ($count == 1)條件直到第二次迭代才成立。 如果使用++$previousProgress ,則將它們都設置為1 那就是前增加和后增加之間的區別。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM