检查变量是否包含相同的值

时间:2017-11-08 07:46:31

标签: php variables if-statement random

我有问题要检查我的任何变量是否包含相同的值。假设我有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个变量?如果它具有相同的值,则重新生成另一个随机字符串,直到它们都不包含相同的值。

3 个答案:

答案 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]);