0

如何创建一个 for 循环来比较这样的变量(任何语言,但专门针对 php):

假设我有 var1 var2 var3 并且如果两个值相同,我希望采取行动。

这就是我所拥有的,但显然它不起作用,因为 var1 总是等于 var1,var2 总是等于 var2 等等。

<?php for ($i = 1; $i <= 10; ++$i) { 
if (${'var'.$i} == ${'var'.$i}) {
// if match do something
}
else {
do something
}

尝试 array_unique。

<?php
for ($i = 1; $i <= $number_of_seats; ++$i) {
$choices = array_unique(array("${'selected_seat'.$i}"));
if (count(${'selected_seat'.$i}) !== count($choices)) {
    echo 'action="fail.php"';
} 
else {
        echo 'action="success.php"';
        }
}

        ?> method="post">
4

1 回答 1

0

编写两个循环会起作用,但会产生 O(n^2) 算法。

您可以先对变量数组进行排序,然后遍历它,看看是否有任何两个连续值相等。这产生了一个 O(nlogn) 算法。

或者您可以使用 HastTable 来获得 O(n) 算法,但需要花费更多的编程时间。

[编辑]

由于效率不是问题,最简单的方法是进行双 for 循环:

<?php
for ($i = 1; $i <= 10; ++$i)
{ 
    for ($j = i+1; $j <= 10; ++$j)
    { 
        if (${'var'.$i} == ${'var'.$j})
        {
            // if match do something
        }
    }
}
?>

请注意,此时您不能没有 else 。

在这段代码中}我正在做的是将 [var1,var2, ...] 中的每个元素与其右侧的元素进行比较。即,我将 var1 与 var2 进行比较,然后与 var3 进行比较,依此类推……

另请注意,您可以将第一个终止更改为“i <= 9”

希望能帮助到你

于 2013-03-25T21:19:25.153 回答