Генерация случайного шестнадцатеричного цветового кода с помощью PHP
Я работаю над проектом, где мне нужно сгенерировать неопределенное количество случайных шестнадцатеричных цветовых кодов...как бы мне построить такую функцию в PHP?
12 ответов:
получаем случайное число от 0 до 255, а затем преобразовать его в hex:
function random_color_part() { return str_pad( dechex( mt_rand( 0, 255 ) ), 2, '0', STR_PAD_LEFT); } function random_color() { return random_color_part() . random_color_part() . random_color_part(); } echo random_color();
шестнадцатеричная строка RGB-это просто число от 0x0 до 0xFFFFFF, поэтому просто создайте число в этом диапазоне и преобразуйте его в шестнадцатеричное:
function rand_color() { return '#' . str_pad(dechex(mt_rand(0, 0xFFFFFF)), 6, '0', STR_PAD_LEFT); }
или:
function rand_color() { return sprintf('#%06X', mt_rand(0, 0xFFFFFF)); }
$rand = str_pad(dechex(rand(0x000000, 0xFFFFFF)), 6, 0, STR_PAD_LEFT); echo('#' . $rand);
вы можете изменить
rand()
наmt_rand()
Если вы хотите, и вы можете поставитьstrtoupper()
вокругstr_pad()
чтобы случайное число выглядело лучше (хотя это и не требуется).Он отлично работает и намного проще, чем все другие методы, описанные здесь:)
допустимые шестнадцатеричные цвета могут содержать от 0 до 9 и от A до F, поэтому, если мы создадим строку с этими символами, а затем перетасуем ее, мы можем захватить первые 6 символов для создания случайного шестнадцатеричного цветового кода. Пример приведен ниже!
код
echo '#' . substr(str_shuffle('ABCDEF0123456789'), 0, 6);
Я проверил это в цикле while и сгенерировал 10 000 уникальных цветов.
код, который я использовал для создания 10 000 уникальных цветов:
$colors = array(); while (true) { $color = substr(str_shuffle('ABCDEF0123456789'), 0, 6); $colors[$color] = '#' . $color; if ( count($colors) == 10000 ) { echo implode(PHP_EOL, $colors); break; } }
, который дал мне эти случайные цвета как результат.
outis указал, что мой первый пример не мог генерировать шестнадцатеричные числа, такие как '4488CC', поэтому я создал функцию, которая могла бы генерировать такие шестнадцатеричные числа.
код
function randomHex() { $chars = 'ABCDEF0123456789'; $color = '#'; for ( $i = 0; $i < 6; $i++ ) { $color .= $chars[rand(0, strlen($chars) - 1)]; } return $color; } echo randomHex();
второй пример было бы лучше использовать, потому что он может возвращать гораздо больше разных результатов, чем первый пример, но если вы не собираетесь генерировать много цветовых кодов, то первый пример будет работать просто отлично.
начиная с PHP 5.3, вы можете использовать openssl_random_pseudo_bytes ():
$hex_string = bin2hex(openssl_random_pseudo_bytes(3));
Я думаю, что это было бы хорошо, так как он получает любой доступный цвет
$color= substr(str_shuffle('AABBCCDDEEFF00112233445566778899AABBCCDDEEFF00112233445566778899AABBCCDDEEFF00112233445566778899'), 0, 6);
веб-безопасные цвета больше не нужны (и даже не являются допустимой концепцией), поскольку даже мобильные устройства имеют 16-битный цвет в эти дни.
посмотреть Википедия для получения дополнительной информации.
другими словами, используйте любой цвет от #000000 до #FFFFFF.
edit: Уважаемые downvoters. Сначала проверьте историю редактирования вопроса.