Question

Ce que j'essaie de faire est le suivant: j'ai un tableau de valeurs, ces valeurs seront éventuellement utilisées pour générer une chaîne unique aléatoire, mais c'est un peu plus tard. Tout d’abord, je voudrais parcourir toutes les valeurs du tableau (boucle foreach), puis j’aimerais limiter ceci (boucle while). C’est une méthode correcte pour le faire?

Le code ci-dessous ne fonctionne pas. Quelqu'un peut-il voir ce que je fais mal?

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

          }
    }

?>
Était-ce utile?

La solution

Ne devriez-vous pas incrémenter votre compteur dans la while boucle pour qu'il puisse sortir?

Autres conseils

La meilleure façon de voir ce qui ne va pas avec une boucle (ou toute autre structure de contrôle) consiste simplement à la parcourir. Parfois, vous pouvez le faire dans votre tête. à d'autres moments, il peut être utile d'insérer des points de trace dans votre code.

Dans ce cas, je pense que si vous parcourez simplement le code dans votre tête, vous serez en mesure de comprendre ce qui ne va pas. Mais à des fins didactiques, je vais le parcourir ici. Commençons par numéroter chaque ligne de code:

$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

Maintenant, parcourons-le:

  1. $array se voit attribuer un tableau à une dimension:
    array(0 => '1', 1 => '2', 2 => '3', ...)
  2. $length est défini sur 15 .
  3. $counter doit définir 0 .
  4. commencer for loop; $values = $array[0] = '1' .
  5. while loop est incrémenté. while = 1 .
  6. commencer <=>; vérifiez que <=> ( 1 ) < = <=> ( 15 ).
  7. Ne rien faire.
  8. Retournez à la ligne 6.
  9. Ligne 6: Si <=> ( 1 ) < = <=> ( 15 ), continuez la boucle.
  10. Ligne 7: ne rien faire.
  11. Ligne 8: retournez à la ligne 6.
  12. Ligne 6: <=> ( 1 ) est toujours < = <=> ( 15 ), passez à nouveau en boucle.
  13. Ligne 7: ne rien faire.
  14. Ligne 8: retournez à la ligne 6.

Comme vous pouvez le constater, vous êtes bloqué dans une boucle infinie, car ni <=> ni <=> ne modifiez les valeurs. La <=> condition de la ligne 6 est donc toujours considérée comme vraie (1 & Lt; = 15).

Tout le code que vous avez posté est légitime, mais il est clair que vous avez omis quelque chose et que c'est la partie qui va aider à répondre à cela ... Sinon, votre compteur $ reste constant pendant la boucle while et il ne sortira jamais

Pourquoi ne pas faire quelque chose comme le code ci-dessous, cela génère une clé avec une boucle. Bon Dieu, pourquoi ne pas créer une fonction pour générer des clés?

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);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top