2016-05-31 2 views
1

Я пытаюсь сделать десятичную -> шестнадцатеричную функцию цвета для php, но, как, например,. он выводит ff19a, хотя я хочу, чтобы он делал ff190a. Я предполагаю, что утверждение if в моей функции foreach не проходит, и, честно говоря, я не знаю почему. Я также попыталсяПочему моя функция foreach не работает?

$value = "0$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); 

Я хотел бы, чтобы получить решение по этому вопросу, и, если это возможно объяснение почему это не работает.

Спасибо!

ответ

1

Я думаю, что вам нужно изменить этот

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 массива, так что вы можете изменить массив значений по ссылка, а не застревание с значение, которое не будет иметь желаемого эффекта.

0

Вы можете просто строка подушечка ваши значения с 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); 
1

Используйте старый foggoten Sprintf :)

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

Я предлагаю идти с ответом splash58, но я подозреваю, что вы» пытаюсь изучить этот материал, а не просто сделать это эффективно, поэтому я добавлю некоторые подробности здесь.

У вас есть некоторые недоразумения в отношении того, как работают функции; они должны принимать некоторые данные и return некоторый выход. Вы не возвращаете какой-либо результат, вместо этого вы используете echoing из функции (это плохая форма.)

Кроме того, вы изменяете одно значение и затем эхом повторяете другое, поэтому вы не видите изменений, отраженных в ваш выход.

И, наконец, вам необходимо выполнить цикл с foreach, используя как the key and the value. Значения, которые вы изменяли, были $hexadecimal["ff"], $hexadecimal["19"] и $hexadecimal["a"] которые, конечно, не существовали. Вместо этого вы хотите изменить $hexadecimal[0], $hexadecimal[1] и $hexadecimal[2]. Другой вариант использует foreachby reference, но это, вероятно, может подождать позже!

Ваш код может выглядеть следующим образом:

<?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() просто зажимает вместе элементы массива.

+0

Я думаю, что все ответы здесь действительны, и вы можете много узнать о них. Всегда есть много способов сделать то же самое. Главное - учиться *. –

+0

@ miken32 wait Я больше всего смущен значением $ key => $, потому что это не многомерный массив, где есть ключ и значение. Я просто храню число в $ hexadecimal, так что нет верного ключа/значения? – mathn00b

+0

@ mathn00b Когда вы создаете такой массив, устанавливаются неявные числовые клавиши. Попробуйте приклеить 'print_r ($ hexadecimal);' перед возвратом функции, и вы увидите их как 0-2. Я сделал одну ошибку в своем ответе на тот момент, который я исправил. Многомерный массив представляет собой массив массивов. – miken32

Смежные вопросы