0

このような変数を比較するための for ループを作成するにはどうすればよいですか (実際には任意の言語ですが、具体的には php 用です):

var1 var2 var3 があり、2 つの値が同じ場合にアクションを実行したいとします。

これは私が持っているものですが、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

2 つのループを記述しても機能しますが、O(n^2) アルゴリズムが生成されます。

最初に変数の配列を並べ替えてから、連続する値のいずれか 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 に答える