2009-05-03 22 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

私が投稿したコードを使用して、何の問題もなく100万文字の鍵を生成しました。 – Sam152

答えて

11

あなたは、whileループ内であなたのカウンタをインクリメントすることではないでしょうか?

+0

ありがとうございます。ザック、+1 –

+0

btw、ごめんなさい。 (明らかに誰かがそれを思った;それはdownvoted得た)。それは意図ではありませんでした。 – bsneeze

+0

ねえ、まったく仲良しではない、私はただ学ぶためにここにいる、歓声。 –

0

以下のようなコードを作成しないと、1つのループでキーが生成されます。地獄、なぜ鍵を生成するための関数を作っていないのですか?

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

ああ、私は後で機能を作成しています、ちょうど今それをfleshing、ありがとう –

0

あなたが投稿したすべてのコードは合法ですが、明らかに何かを残していると、それがこれを答える助けるために起こっている部分です...それ以外の場合は、お使いの$カウンタは、whileループの間に一定のままで、それ

7

ループ(または他の制御構造)の何が問題なのかを確認する最良の方法は、それを実行することです。時々あなたの頭の中でそれをすることができます。トレースポイントをコードに挿入すると便利な場合もあります。

この場合、頭の中のコードを実行するだけで、間違っているものを拾うことができます。しかし、教訓的な目的のために、ここでそれを実行します。まずLETの数は、各コード行:

$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 

今度はそれを介して実行してみましょう:
array(0 => '1', 1 => '2', 2 => '3', ...)

  • $length に設定されています:

    1. $arrayは、単一次元配列が割り当てられています。
    2. $counterを設定する。。
    3. 開始for loop; $values = $array[0] = '1'
    4. $counterがインクリメントされます。 $counter = 。
    5. 開始while loop; $counter()< = $length()を確認してください。
    6. 何もしないでください。
    7. バックラインに移動6.
    8. ライン6:$counter()< = $length()場合、ループを継続します。
    9. 行7:何もしません。
    10. 8行目:6行目に戻ります。
    11. 6行目:$counter(は)まだ< = $length()で、再びループに入ります。
    12. 行7:何もしません。
    13. 8行目:あなたが見ることができるようにどちら$counter$length変更値ので、あなたが無限ループで立ち往生しているバックラインに6

    を移動します。したがって、ライン6のwhileの条件は、常に(1 < = 15)と評価されます。

  • +0

    非常によく説明カルバン、ありがとう –

    関連する問題