总数字不一致

Ama*_*ans 2 php

我使用以下代码来获取随机十六进制值.但输出不一致有时它返回6位有时5位数

function generateHexValue($length=6) 
{
    $chars = "0123456789abcdef";

    $i = 0;
    $str = "";

    while ($i<$length) {
        $str .= $chars[mt_rand(0,strlen($chars))];
        $i++;
    }

    return $str;    
}

$col=generateHexValue();
echo "<div style='background-color:#".$col."; width:100px; height:100px;'></div>";
echo $col."<br/>";
Run Code Online (Sandbox Code Playgroud)

Nic*_*haw 6

你的电话mt_rand()应该最多strlen($chars)-1,而不是strlen($chars).最大值mt_rand包括在内.你可以从$chars数组的末尾得到一个索引(例如$chars[16],这是一个未定义的偏移量$chars).不确定PHP会做什么.

  • 绝对正确.你甚至可能收到一个空字符串.你的字符串最后一个char索引是15,而`strlen($ str)`返回16.` $ str [16]`是空的,所以没有任何东西被附加到你的字符串. (2认同)

dec*_*eze 5

那是因为mt_rand(0,strlen($chars))返回0到16之间的数字(包括0和16),但是你的$chars字符串只有0到15的偏移量.这是一个经典的一个错误.