Bir döngü içinde bir süre döngü kullanmak mümkün?

4 Cevap php

Ne yapmaya çalışıyorum şu: Ben değerler bir dizi var, bu değerler sonunda rasgele benzersiz bir dize oluşturmak için kullanılacak ama bu biraz geç. Öncelikle sonra ben bu iş için doğru bir yöntem mi (döngü iken) bu sınırlamak istiyorum dizi (foreach loop) tüm değerleri döngü istersiniz?

Aşağıdaki kod herkes ben ne yapıyorum yanlış görebilirsiniz, çalışmıyor?

<?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 Cevap

Eğer while döngü içinde sayacı artırma olmamalı, bu nedenle çıkabilirsiniz?

Bir döngü (veya başka herhangi bir kontrol yapısı) ile sorunun ne olduğunu görmek için en iyi yolu, sadece bunun üzerinden çalıştırmak. Bazen kafanın içinde bunu yapabilir; diğer zamanlarda, bu koduna izleme noktaları eklemek yardımcı olabilir.

Bu durumda, ben sadece kafanın içinde kod aracılığıyla çalıştırırsanız, bunun nesi almak mümkün olacak düşünüyorum. Ama didaktik amaçlar için, ben burada bir dolaşalım. İlk diyelim sayısı her kod satırı:

$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

Şimdi bunun üzerinden çalışmasına izin:

  1. $array is assigned a single dimensional array:
    array(0 => '1', 1 => '2', 2 => '3', ...)
  2. $length 15 ayarlanır.
  3. $counter ayarlamaktır 0.
  4. Begin {[(0)];} $values = $array[0] = '1'.
  5. $counter artırılır. $counter = 1.
  6. Begin {[(0)];} kontrol $counter (1) <$length (15).
  7. Hiçbir şey yapmayın.
  8. Geri hattına 6 gidin.
  9. Hat 6: $counter (1) <$length (15), döngü devam edin.
  10. Satır 7: Hiçbir şey yapmayın.
  11. Satır 8: geri doğrultusunda 6 gidin.
  12. Hat 6: $counter (1) hala <$length (15), tekrar döngüye girer.
  13. Satır 7: Hiçbir şey yapmayın.
  14. Satır 8: geri doğrultusunda 6 gidin.

Gördüğünüz gibi, sonsuz bir döngü içinde sıkışmış ne $counter, ne $length değişim değerleri çünkü. Yani 6 hattın while durum her zaman true (1 <= 15) değerlendirir.

Gönderdiniz tüm kodu okunaklı, ama açıkça bir şey yapmamışlar ve bu ... Aksi halde bu yanıtlayan yardımcı olacak bir parçası, senin $ sayaç while döngüsü boyunca sabit kalır ve çıkış asla anlayamayacağım

Aşağıdaki kodu gibi bir şey yapmak değil, neden, bu bir döngü ile bir anahtar oluşturur. Cehennem, neden anahtarları oluşturmak için bir işlev yapmak değil mi?

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