Possible d'utiliser une boucle while dans une boucle?
-
03-07-2019 - |
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)
{
}
}
?>
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:
-
$array
se voit attribuer un tableau à une dimension:
array(0 => '1', 1 => '2', 2 => '3', ...)
-
$length
est défini sur 15 . -
$counter
doit définir 0 . - commencer
for loop
;$values
=$array[0]
= '1' . -
while loop
est incrémenté.while
= 1 . - commencer <=>; vérifiez que <=> ( 1 ) < = <=> ( 15 ).
- Ne rien faire.
- Retournez à la ligne 6.
- Ligne 6: Si <=> ( 1 ) < = <=> ( 15 ), continuez la boucle.
- Ligne 7: ne rien faire.
- Ligne 8: retournez à la ligne 6.
- Ligne 6: <=> ( 1 ) est toujours < = <=> ( 15 ), passez à nouveau en boucle.
- Ligne 7: ne rien faire.
- 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);