[英]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和value與foreach
循環。 您正在修改的值是$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.