如何使用循环和数组获取10个变量中具有相似值的2个变量

时间:2018-12-14 19:54:10

标签: php

有10个变量,也许第1个变量和第3个变量是相同的值,也许第5个变量和第1个变量是相同的值,当发现任何两个具有相同值的变量时,请执行某些操作。我可以在if语句中执行此操作,但是代码会很长,如何通过for循环和数组来缩短代码?

def SignGen(message, q, p, g, alpha):   # calculating s, h values. Signature Generation

k = random.randint(0, q-1)
r = pow(g, k, p)
h = (hashlib.sha3_256(message + r).hexdigest())
s = (alpha*h + k) % q
return s, h

3 个答案:

答案 0 :(得分:1)

另一种可能的方法。将变量放入数组并使用嵌套循环:

<?php
$q1 = 12;
$q2 = 13;
$q3 = 12;
$q4 = 22;
$q5 = 99;
$q6 = 100;
$q7 = 62;
$q8 = 99;
$q9 = 12;
$q10 = 99;

$array = [$q1, $q2, $q3, $q4, $q5, $q6, $q7, $q8, $q9, $q10];
for ($i = 0; $i < count($array); $i++) {
    for ($j = $i + 1; $j < count($array); $j++) {
        if  ($array[$i] == $array[$j]) {
            echo 'q'.($i+1).', q'.($j+1).'<br>';
            // Do something
        }
    }
}
?>

输出:

q1, q3
q1, q9
q3, q9
q5, q8
q5, q10
q8, q10

答案 1 :(得分:0)

由于该问题被标记为PHP,因此这是一个PHP解决方案,尽管您所包含的代码看起来并不像PHP。

$arr = [$q1, $q2,$q3, $q4, $q5, $q6, $q7, $q8, $q9, $q10];
foreach ($arr as $i=>$v){
 $ind = array_search($v, $arr);
 if($ind !== false && $ind !== $i){
  echo "Dupes ($ind, $i)";
 //do something
 }
}

答案 2 :(得分:0)

如果使用数组,这将变得很简单:

<?php

$values =
[
    'q1'=>'3',
    'q2'=>'1',
    'q3'=>'3',
    'q4'=>'5'
];

$has_dupes = array_unique($values)!==$values;

var_dump($has_dupes);

输出:

bool(true)

如果您需要具有匹配值的键:

<?php
$matches = [];
foreach(array_count_values($values) as $key=>$count)
    if($count!==1)
        $matches[] = array_keys($values, $key);

var_export($matches);

输出:

array (
0 => 
array (
    0 => 'q1',
    1 => 'q3',
),
)