【问题标题】:PHP For Loop strange issuePHP For Loop 奇怪的问题
【发布时间】:2012-02-02 04:57:09
【问题描述】:

为什么这段代码有时只生成 4 个字符串?

function genID()
{
    $id     = '';
    $values = '0123456789abcdefghijklmnopqrstuvwxyz';

    for($i=0; $i < 5; $i++) :
        $str = substr($values, rand(0, strlen($values)), 1);
        if(!is_nan(acos($str)))
            (mt_rand(0, 1)) ? $str = strtoupper($str) : '';
        $id .= $str;
    endfor;

    return $id; // e.g: ifR8j
}

【问题讨论】:

  • if(!is_nan(acos($str))) (mt_rand(0, 1)) 到底是什么? $str = strtoupper($str) : '';应该在做什么?为什么要尝试将三角函数应用于字符?
  • 来自acos float acos ( float $arg )$arg 的手册是“以弧度表示的 arg 的反余弦”。
  • 我这样做纯粹是为了懒惰,我可以把它拿出来手动输入 A-Z 但这仍然不能回答为什么它有时会返回 4?
  • 随机 4 位 id 生成更简单的功能
  • 我会说有时候,acos($str)(arccos of a character?!?等等,什么?)不是一个数字并且 mt_rand返回一个@987654325 @。因此,您在第 9 行到达您的条件的 '' 部分。完全按照您的要求执行;)问题是,您 尝试 对行上的条件做什么8-9?

标签: php string loops random for-loop


【解决方案1】:

acos($str) 接受数字而不是字符串......如果你从字符串中删除 aphabets

即。

$values = '0123456789abcdefghijklmnopqrstuvwxyz';

到

$values = '0123456789';

你会得到长度为 5...希望这会有所帮助..

【讨论】:

    【解决方案2】:

    试试,简单点:

    function genID() { $id = ''; $i = $length = 4; $possible = "0123456789bcdfghjkmnpqrstvwxyz"; $possibleChar = strlen($possible) - 1; while ($i) { $char = $possible[mt_rand(0, $possibleChar)]; while (!strstr($id, $char)) { $id .= $char; $i--; } } return $id; }

    【讨论】:

      【解决方案3】:
       (mt_rand(0, 1)) ? $str = strtoupper($str) : '';
      

      满足此条件,因此有时您会得到一个空字符。

      修复条件或以其他方式执行循环。 例如

      while(strlen($id)<5) {
         //do the loop
      }
      

      【讨论】:

      • 顺便说一句。您使用 mt_rabdm acos 等使方式变得复杂
      • 啊,很好,解决方案也是。 rand(0, strlen - 1) 也可以。
      【解决方案4】:

      循环迭代 5 次。

      rand 也会返回strlen,所以$str 有时会是""

      【讨论】:

        【解决方案5】:
        $str = substr($values, rand(0, strlen($values))-1, 1);
        

        这将始终生成 5 个字符。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-06-06
          • 1970-01-01
          • 2011-06-25
          • 2013-08-05
          • 2019-10-03
          • 2019-06-27
          • 1970-01-01
          相关资源
          最近更新 更多