我有问题要检查我的任何变量是否包含相同的值。假设我有8个变量,只有随机生成的小写字母。对于您的信息,此值不需要是安全的。
$variable1 = random_string();
$variable2 = random_string();
$variable3 = random_string();
$variable4 = random_string();
$variable5 = random_string();
$variable6 = random_string();
$variable7 = random_string();
$variable8 = random_string();
function random_string($length = 6) {
$characters = 'abcdefghijklmnopqrstuvwxyz';
$characters_length = strlen($characters);
$random_string = '';
for ($i = 0; $i < $length; $i++) {
$random_string .= $characters[rand(0, $characters_length - 1)];
}
return $random_string;
}
我见过this accepted answer at this question。我的问题是,如果这些变量中的任何一个具有相同或相同的值,是否有更简单的方法来比较所有这8个变量?如果它具有相同的值,则重新生成另一个随机字符串,直到它们都不包含相同的值。
答案 0 :(得分:1)
如果变量数是静态的,请尝试:
$variable1 = random_string();
$variable2 = random_string();
$variable3 = random_string();
$variable4 = random_string();
$variable5 = random_string();
$variable6 = random_string();
$variable7 = random_string();
$variable8 = random_string();
function random_string($length = 6) {
$characters = 'abcdefghijklmnopqrstuvwxyz';
$characters_length = strlen($characters);
$random_string = '';
for ($i = 0; $i < $length; $i++) {
$random_string .= $characters[rand(0, $characters_length - 1)];
}
return $random_string;
}
$arr = [];
for($i=1;$i<=8;$i++)
{
if(!in_array(${"variable$i"}, $arr))
{
$arr[] = ${"variable$i"};
}else
{
${"variable$i"} = random_string();
$i--;
}
}
这将动态访问所有变量,并为var生成一个已存在的值的新值。这可以通过将values
1中的所有array
存储起来,并将新值与已存在的值进行比较来实现。
答案 1 :(得分:1)
如何使用array_unique()
和count()
?
$a = array();
array_push($a, random_string());
array_push($a, random_string());
array_push($a, random_string());
array_push($a, random_string());
array_push($a, random_string());
array_push($a, random_string());
array_push($a, random_string());
array_push($a, random_string());
$num_dups = count($a) - count(array_unique($a));
if ($num_dups == 0) {
echo("all unique\n");
} else {
echo("number of dups: " . $num_dups . "\n");
}
echo("create one dup\n");
$a[1] = $a[2];
$num_dups = count($a) - count(array_unique($a));
if ($num_dups == 0) {
echo("all unique\n");
} else {
echo("number of dups: " . $num_dups . "\n");
}
function random_string($length = 6) {
$characters = 'abcdefghijklmnopqrstuvwxyz';
$characters_length = strlen($characters);
$random_string = '';
for ($i = 0; $i < $length; $i++) {
$random_string .= $characters[rand(0, $characters_length - 1)];
}
return $random_string;
}
输出是:
$ php uniq.php
all unique
create one dup
number of dups: 1
答案 2 :(得分:1)
我认为,在这种情况下最好使用一个数组(不是八个单独的变量),它可以很容易地检查生成的字符串是否已经使用过。
使用list
函数,您可以将数组中的数据分配给单独的变量。
示例:
<?php
$variables = [];
for($i = 0; $i < 8; $i++) {
$randomString = random_string();
if ($i > 0 && in_array($randomString, $variables))
$i--;
else
$variables[$i] = $randomString;
}
list($variable1, $variable2, $variable3, $variable4, $variable5, $variable6, $variable7, $variable8) = $variables;
print_r([$variable1, $variable2, $variable3, $variable4, $variable5, $variable6, $variable7, $variable8]);