【问题标题】:Distinguishing matching variables with a for loop使用 for 循环区分匹配变量
【发布时间】:2013-03-25 21:12:22
【问题描述】:

如何创建一个 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">

【问题讨论】:

  • 问题中的逻辑需要两个循环 - 但为什么要这样做?
  • 您能说明一下您的期望吗?也许给出满足您条件的列表和不满足您的条件的列表示例
  • 我有一个订票系统,想检查每次选择是否选择了某些座位,如果座位相同,则不允许继续。因此,如果 $var1 是 'A1' 而 $var2 是 'A1' 它会将它们发送到一个页面,但如果 $var1 是 'A1 而 $var2 是 'A2' 它会将它们发送到另一个页面。
  • 为什么不把用户输入当作一个数组,只用array_unique呢?即$choices = array_unique($input); if (count($input) !== count($choices)) { ...。更完整的问题可能会产生更完整的答案。
  • 我尝试了你所说的,虽然我不太了解,因为我没有经验。我所知道的唯一输入是在盒子的 $_POST 中找到它们时。

标签: php logic


【解决方案1】:

编写两个循环可以,但会产生 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

希望对你有帮助

【讨论】:

  • 您能提供一个在 php 中执行此操作的示例方法吗?效率无所谓。
  • 好吧,如果我说 A1 A2 A2 那么逻辑就失败了,有什么想法吗?它适用于 A1 A1 A2。这是否意味着如果我有 10 个变量,我需要另一个嵌套的 for 循环,那么我需要 10 个循环吗?
  • 而且 A1 A2 A1 由于某种原因也没有返回失败。
猜你喜欢
  • 2019-08-11
  • 2016-07-30
  • 2015-07-07
  • 2012-02-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多