簡體   English   中英

為什么我的foreach函數沒有運行?

[英]Why isn't my foreach function running?

我正在嘗試為php做一個十進制->十六進制顏色函數,但是像eg。 即使我希望它執行ff190a,它也會打印出ff19a。 我假設我的foreach函數中的if語句沒有通過,說實話我也不知道為什么。 我也嘗試過

$value = "0$value";

對於$ hexadecimal [$ value]中的行也無效

<?php
function decimalColors($red, $green, $blue){
    $hexadecimal = [dechex($red), dechex($green), dechex($blue)];
    foreach ($hexadecimal as $value) {
        if (strlen($value) == 1){
            $hexadecimal[$value] = "0".$value;
        }
        echo $value;
    }
}

echo decimalColors(255, 25, 10);

我很樂意為此尋求解決方案,並在可能的情況下解釋為什么它不起作用。

謝謝!

我建議您使用splash58的答案,但是我懷疑您是在嘗試學習這些東西,而不僅僅是高效地完成它,因此,我將在此處添加一些詳細信息。

您對函數的工作方式有一些誤解; 他們應該接受一些輸入並返回一些輸出。 您沒有返回任何輸出,而是從函數中回顯 (這是錯誤的形式。)

此外,您正在修改一個值,然后回顯另一個值,這就是為什么您看不到輸出中反映出的更改的原因。

最后,您需要同時使用key和valueforeach循環。 您正在修改的值是$hexadecimal["ff"]$hexadecimal["19"]$hexadecimal["a"]當然不存在。 相反,您想要修改$hexadecimal[0]$hexadecimal[1]$hexadecimal[2] 另一個選項是通過引用使用foreach ,但可能可以等待稍后!

您的代碼可能更像這樣:

<?php
function hexColors($red, $green, $blue){
    $hexadecimal = [dechex($red), dechex($green), dechex($blue)];
    foreach ($hexadecimal as $key=>$value) {
        if (strlen($value) == 1){
            $hexadecimal[$key] = "0".$value;
        }
    }
    return implode("", $hexadecimal);
}

echo hexColors(255, 25, 10);

請注意, implode()函數只是將數組的元素卡在一起。

我認為你需要改變這個

function decimalColors($red, $green, $blue){
    $hexadecimal = [dechex($red), dechex($green), dechex($blue)];
    foreach ($hexadecimal as $value) {
        if (strlen($value) == 1){
            $hexadecimal[$value] = "0".$value;
        }
        echo $value;
    }
}

對此:

function decimalColors($red, $green, $blue){
    $hexadecimal = [dechex($red), dechex($green), dechex($blue)];
    foreach ($hexadecimal as &$value) {
        if (strlen($value) == 1){
            $value = "0".$value;
        }
        echo $value;
    }
}

這使用了foreach數組的引用形式,因此您可以通過reference更改數組的值,而不用卡在不會產生預期效果的上。

使用舊的foggoten sprintf :)

function decimalColors($red, $green, $blue){
     return sprintf('%02x%02x%02x', $red, $green, $blue);
}

您只需將值用0填充字符串並返回:

function decimalColors($red, $green, $blue)
    {
        return str_pad(dechex($red),2,0,STR_PAD_LEFT).str_pad(dechex($green),2,0,STR_PAD_LEFT).str_pad(dechex($blue),2,0,STR_PAD_LEFT);
    }

echo decimalColors(255, 10, 20);

暫無
暫無

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

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