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

감사합니다. Zach, +1 –

+0

btw, 죄송합니다. (분명히 누군가 그것이 그것이라고 생각했다 그것은 downvoted하게되었다). 그것은 의도가 아니 었습니다. – bsneeze

+0

안녕하세요, 모든 친구를 괴롭히지 않습니다. 저는 배울 점이 있습니다. –

0

아래 코드와 같은 코드를 작성하면 키가 한 루프 만 생성됩니다. 왜 키를 생성하는 함수를 만들지 않습니까? 그렇지 않으면 $ 카운터는 while 루프와 그 동안 일정하게 유지 ... 당신이 게시 한

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

아하 나중에 함수를 생성 할 예정입니다. 감사합니다. –

0

모든 코드는 합법적이지만, 분명 당신은 무언가를 떠난하고이 응답 도움이 될 것 부분이다

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. $length15로 설정됩니다.
  3. $counter은 으로 설정해야합니다.
  4. 시작 for loop; $values = $array[0] = '1'.
  5. $counter이 증가합니다. $counter = .
  6. 시작 while loop; $counter() < = $length()을 확인하십시오.
  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 변화 값에 갇혀있다. 따라서 라인 6의 while 조건은 항상 true (1 < = 15)으로 평가됩니다.

+0

매우 잘 설명 된 Calvin, 감사합니다. –