質問

私がやろうとしていることは次のとおりです。値の配列があり、これらの値は最終的にランダムな一意の文字列を生成するために使用されますが、それは少し後です。最初に配列内のすべての値をループ処理し(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)
          {

          }
    }

?>
役に立ちましたか?

解決

whileループ内でカウンターをインクリメントして、終了できるようにしませんか?

他のヒント

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

この場合、頭の中でコードを実行するだけで、何が問題なのかを見つけることができると思います。しかし、教訓的な目的のために、ここでそれを実行します。まず、コードの各行に番号を付けましょう:

$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. while loopが増分されます。 while = 1
  6. 開始<=>; <=>( 1 )<!> lt; = <=>( 15 )であることを確認してください。
  7. 何もしません。
  8. 6行目に戻ります。
  9. 6行目:<=>( 1 )<!> lt; = <=>( 15 )の場合、ループを続行します。
  10. 行7:何もしません。
  11. 8行目:6行目に戻ります。
  12. 6行目:<=>( 1 )はまだ<!> lt; = <=>( 15 )です。もう一度ループに入ります。
  13. 行7:何もしません。
  14. 8行目:6行目に戻ります。

ご覧のとおり、<=>も<=>も値を変更しないため、無限ループに陥っています。したがって、6行目の<=>条件は常に true (1 <!> lt; = 15)と評価されます。

投稿したコードはすべて合法ですが、明らかにあなたが何かを残しており、それがこれに答えるのに役立つ部分です...そうでなければ、$ counterはwhileループ中に一定のままであり、終了することはありません

以下のコードのようなことをしないのは、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);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top