Pergunta

O que estou tentando fazer é o seguinte: Eu tenho uma matriz de valores, esses valores acabará por ser usado para gerar uma cadeia exclusiva aleatória, mas isso é um pouco mais tarde. Primeiro eu gostaria de percorrer todos os valores na matriz (loop foreach), então eu gostaria de limitar este (while) é um método correto para fazer isso?

O código abaixo não funciona, alguém pode ver o que estou fazendo de errado?

<?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)
          {

          }
    }

?>
Foi útil?

Solução

Você não deveria ser incrementar seu contador dentro do ciclo while, para que ele possa sair?

Outras dicas

A melhor maneira de ver o que está errado com um loop (ou qualquer outra estrutura de controle) é apenas para correr com ele. Às vezes você pode fazê-lo em sua cabeça; em outros momentos, pode ser útil para inserir pontos de rastreio em seu código.

Neste caso, eu acho que se você simplesmente executar o código em sua cabeça, você vai ser capaz de pegar o que há de errado com ele. Mas, para fins didáticos, eu vou correr com ele aqui. número Primeiro vamos cada linha de código:

$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

Agora vamos correr com ele:

  1. $array é atribuído uma matriz dimensional única:
    array(0 => '1', 1 => '2', 2 => '3', ...)
  2. $length está definido para 15 .
  3. $counter é definir 0 .
  4. Comece for loop; $values = $array[0] = '1' .
  5. $counter é incrementado. $counter = 1 .
  6. Comece while loop; verificar que $counter ( 1 ) <= $length ( 15 ).
  7. Não faça nada.
  8. Volte para a linha 6.
  9. Linha 6:. Se $counter ( 1 ) <= $length ( 15 ), continuar laço
  10. Linha 7:. Do nada
  11. Linha 8:. Volte para a linha 6
  12. Linha 6:. $counter ( 1 ) é ainda <= $length ( 15 ), entrar em ciclo novamente
  13. Linha 7:. Do nada
  14. Linha 8:. Volte para a linha 6

Como você pode ver, você está preso em um loop infinito, porque nem $counter nem $length alterar valores. Assim, a condição while em linha 6 sempre avalia a verdadeiro (1 <= 15).

Todo o código que você postou é legítimo, mas é evidente que você tem algo esquerda para fora e essa é a parte que vai ajuda responder a esta ... Caso contrário, o seu $ estadias contra constante durante o loop while e que nunca vai sair

Por que não fazer algo como o código abaixo, gera uma chave com um loop. Inferno, por que não fazer uma função para gerar chaves?

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);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top