[英]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
變量,因為通常會在for
或foreach
循環中一次輸出某些內容,但是由於該函數只是遞歸運行,直到超時,該函數又重新開始,因此不起作用。
就像我說的那樣,我可以在此函數中插入變量數組以幫助我...但是考慮到該函數重新啟動並每次都重新運行,我不確定如何做到這一點。
嘗試了其他隨機的東西,但是我顯然丟失了一些東西。 如何在重復功能中僅回顯一次下載大小?
靜態布爾變量應該執行您想要的操作。
static $firstTime = true;
if ($firstTime) {
echo "something";
$firstTime = false;
}
代碼的問題可能是因為您使用的是后增量。 如果$previousProgress
為0
,則行:
$count = $previousProgress++;
將$count
設置$count
0
(舊值),同時將$previousProgress
遞增為1
。 因此, if ($count == 1)
條件直到第二次迭代才成立。 如果使用++$previousProgress
,則將它們都設置為1
。 那就是前增加和后增加之間的區別。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.