2009-05-03 33 views
0

我想要做的是以下几点:我有一个值的数组,这些值将最终被用来生成一个随机的唯一字符串,但稍后。首先我想遍历数组中的所有值(foreach循环),然后我想限制这个(while循环)这是做这个的正确方法吗?可能在循环中使用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) 
      { 

      } 
    } 

?> 
+0

使用我发布的代码,我生成了一个没有问题的一百万个字符的密钥。 – Sam152 2009-05-03 00:55:01

回答

11

你不是应该递增while循环内的计数器,所以它可以退出?

+0

谢谢扎克,+1 – 2009-05-03 00:56:37

+0

顺便说一句,对不起,如果这碰到光顾。 (显然有人认为是这样;它被压低了)。那不是意图。 – bsneeze 2009-05-03 01:05:11

+0

嘿,不用麻烦大家,我只是在这里学习,欢呼。 – 2009-05-03 01:13:48

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); 
0

所有你发布的代码是合法的,但显然你已经离开了一样东西,那是,那将有助于回答这一部分...否则,你的$计数器while循环,它在保持不变将永远不会退出

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设置为。
  3. $counter要设置。
  4. 开始for loop; $values = $array[0] = '1'
  5. $counter递增。 $counter = 。
  6. 开始while loop;检查$counter()< = $length()。
  7. 什么都不做。
  8. 回线6
  9. 第6行:如果$counter()< $length =(),继续循环。
  10. 第7行:什么也不做。
  11. 第8行:返回第6行。
  12. 第6行:$counter()仍然< $length =(),进入循环一次。
  13. 第7行:什么也不做。 8
  14. 行:回到6行

正如你所看到的,你是停留在一个无限循环,因为无论$counter也不$length变化值。因此,第6行中的while条件始终计算为true(1 < = 15)。