【问题标题】:Check if variables contain identical value检查变量是否包含相同的值
【发布时间】:2017-11-08 07:46:30
【问题描述】:

我无法检查我的任何变量是否包含相同的值。假设我有 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 个变量?如果它确实具有相同的值,则重新生成另一个随机字符串,直到其中没有一个包含相同的值。

【问题讨论】:

  • 这是不对的。每次页面加载时都会生成新字符串,为此您必须一次又一次地重写所有 css 和 js 代码。你为什么要这么做?
  • 如果就这么简单 - 为什么不将 1..8 附加到 8 个随机生成的类名上?
  • 准确地说:使用$variable1 = random_string() . "_1"

标签: php variables if-statement random


【解决方案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]);

【讨论】:

  • 我不能使用 1 个变量。需要多个变量。
  • 抱歉回复晚了。我试过这段代码。它工作得非常完美,很容易适应我的代码。感谢您的宝贵时间。
【解决方案2】:

使用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

【讨论】:

  • 抱歉回复晚了。我试过这段代码。它工作得很好。但接受的答案很容易适应我的代码。抱歉,感谢您的宝贵时间。
【解决方案3】:

如果变量的数量是静态的,那么试试:

$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 x 1 存储在array 中,并将新值与已经存在的值进行比较来实现的。

【讨论】:

  • 抱歉回复晚了。我试过这段代码。它工作得很好。但接受的答案很容易适应我的代码。抱歉,感谢您的宝贵时间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-06
  • 2018-06-29
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多