0

最大 1000 個の名前を返す可能性のある SELECT クエリがあります。300 ~ 400 個の名前を返す可能性が高くなります。

入力文字列を、SELECT クエリによって返される配列内の名前と比較したいと考えています。

2 つの質問があります。

  1. 一致する値があるかどうかを見つけるために、for ループが配列 ( 内の 1000 個の名前すべて) を実行するのにどれくらいの時間がかかりますか? と
  2. 一致が見つかったらすぐにループを終了する方法はありますか? (10 番目の名前で一致が見つかった場合、残りを実行するのは無駄です。それ以上の一致があるかどうかは問題ではありません。最初の名前をヒットするだけで十分です。)

return と exit を試しましたが、どちらも希望どおりに機能しません。

アイデアをテストするために実行しているコードは次のとおりです。最初のphpファイルには、名前の配列が含まれています

<?php 
$names=array("R","A","V");
$arrlengths=count($names);
?>

2 番目のファイルに含まれています。

<?php
include 'test-2nd-include.php';
//the above file contains an array with three names
//it also contains the length of the array in the arrlengths variable


//in the test case we are using a name assigned to a variable in this file
//however, when used on the registration page, it will be a value that has come through   $_POST

$rr = "A";

 //a test variable that is initially = 0 but will be incremented if value is found in array

$ohno = 0;


for($xx=0;$xx<$arrlengths;$xx++)
{
echo "$ names [ $xx ] ", $names[$xx]; 
echo "<br>";


   if ($names[$xx] ==$rr) {
           // if the value is found then the test variable is set t
            $ohno = 1;
    }
}
if ($ohno > 0){
    echo " $rr already exists in our members list" ;
}
else {
echo "Congratulations! $rr is still available!" ;
}

?>

私が見たのは$ohno = 1;、最後のメッセージが処理されなかった後に return または exit を使用した場合です。を for ループに移動するとif ($ohno > 0){......$rr is still available!" ;}、結果は非常に奇妙になります!

何かが欠けていると確信していますが、午後全体を見つめた後でも、最初の一致に遭遇した後にコードの実行を停止し、適切なメッセージを表示する方法を見つけることができません-一致が見つかったときと一致したときの両方しません。

それが最初の質問の理由です!これを行うために費やしている時間は、長期的にはサーバー時間/処理の観点から節約する価値がありますか? 結局のところ、予想される最大ユーザー数が 1000 の場合、このコードは 1 か月ほどの間に約 300 ~ 400 回実行される可能性があります。

4

2 に答える 2