0

我正在尝试做的是以下内容:我有一个值数组,这些值最终将用于生成一个随机的唯一字符串,但这要晚一点。首先我想遍历数组中的所有值(foreach 循环)然后我想限制这个(while 循环)这是一个正确的方法吗?

下面的代码不起作用,任何人都可以看到我做错了什么吗?

<?php 

    $array = array(
          '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', 
          'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 
          'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 
          'u', 'v', 'w', 'x', 'y', 'z', '!', '£', '$', '%',
          '^', '&', '*', '(', ')', '_', '+', '{', '}'
    );

    $length_of_unique_key = 15;
    $counter = 0;

    foreach($array as $values)
    {
          $counter++;

          while ($counter <= $length_of_unique_key)
          {

          }
    }

?>
4

4 回答 4

11

你不应该在while循环中增加你的计数器,所以它可以退出吗?

于 2009-05-03T00:46:13.010 回答
7

查看循环(或任何其他控制结构)出了什么问题的最好方法就是遍历它。有时您可以在脑海中做到这一点;在其他时候,将跟踪点插入代码可能会有所帮助。

在这种情况下,我认为如果您只是简单地在脑海中运行代码,您将能够发现它有什么问题。但出于教学目的,我将在这里进行介绍。首先让我们给每一行代码编号:

$array = array(...);               // line 1
$length = 15;                      // line 2
$counter = 0;                      // line 3
foreach($array as $values)         // line 4
{
      $counter++;                  // line 5
      while ($counter <= $length)  // line 6
      {
                                   // line 7
      }                            // line 8
                                   // line 9
}                                  // line 10

现在让我们来看看它:

  1. $array被分配一个一维数组:
    array(0 => '1', 1 => '2', 2 => '3', ...)
  2. $length设置为15
  3. $counter是设置0
  4. 开始for loop$values= $array[0]= '1'
  5. $counter递增。$counter= 1
  6. 开始while loop;检查$counter( 1 ) <= $length( 15 )。
  7. 没做什么。
  8. 回到第 6 行。
  9. 第 6 行:如果$counter( 1 ) <= $length( 15 ),继续循环。
  10. 第 7 行:什么都不做。
  11. 第 8 行:回到第 6 行。
  12. 第 6 行:$counter( 1 ) 仍然 <= $length( 15 ),再次进入循环。
  13. 第 7 行:什么都不做。
  14. 第 8 行:回到第 6 行。

如您所见,您陷入了无限循环,因为既不改变$counter也不$length改变值。所以第while6 行中的条件总是计算为(1 <= 15)。

于 2009-05-03T01:29:07.353 回答
0

为什么不做类似下面的代码,它会生成一个循环的密钥。见鬼,为什么不做一个生成密钥的函数呢?

function keyval($length)
{
    $length_of_unique_key = $length;
    $array = array(
          '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', 
          'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 
          'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 
          'u', 'v', 'w', 'x', 'y', 'z', '!', '£', '$', '%',
          '^', '&', '*', '(', ')', '_', '+', '{', '}'
    );
    for($i=0;$i<$length_of_unique_key;$i++)
    {
        $key.=$array[rand(0,sizeof($array)-1)];
    }
    return $key;
}

echo keyval(15);
于 2009-05-03T00:46:36.333 回答
0

您发布的所有代码都是合法的,但显然您遗漏了一些内容,这将有助于回答这个问题......否则,您的 $counter 在 while 循环期间保持不变,它永远不会退出

于 2009-05-03T00:46:49.437 回答