プロが教えるわが家の防犯対策術!

初心者です。とある参考書をみてdo whileを習っています。
以下のスクリプトがなぜ、条件文にあてはまるのか知りたいわけです。

$db_data[0] = array("username" => "abcdefg0");
$db_data[1] = array("username" => "abcdefg1");
$db_data[2] = array("username" => "abcdefg2");
//ここまでは多次元配列しているな~って感じくらいでわかります。
do{
$flg = FALSE;
    //$flgには、なにもいれない。

$username = md5(uniqid(rand(),1));
    //ランダムにIDを作っているんだな~って感じです

if($db_data[0]["username"] == $username){ $flg = true;}
if($db_data[1]["username"] == $username){ $flg = true;}
if($db_data[2]["username"] == $username){ $flg = true;}
    //問題はここなんですが、なぜ比較演算子「==」で$flg = trueに
なるのかがわかりません。なぜ多次元配列で作られた"username"とmd5で
作られた$usernameが一致するのでしょうか?

} while ( $flg );
print "あなたのユーザIDは" . $username . "です。";

A 回答 (3件)

なぜ、というところがよくわからないのですが。



do{
  $db_data[0]["user_name"] = "abcdefg...";//名前を代入
  $flg = false;//$flgはfalse
  $user_name = md5(uniqid(rand(),1));//乱数生成
  if ($db_data[0]["user_name"] == $user_name){ //乱数と、配列に代入された名前を比較
    $flg = true; //一致してたら$flgにtrueを代入
  }
}while ($flg); //万が一$flgがtrueだったらもう一回ループ

事前に配列に代入してる値と、乱数で生成された値が一致しちゃった場合、もう一回乱数を作ってみる。ですかね。
質問の内容からですと、連想配列とかの問題でしょうか?
見当違いのこと書いてたらすいません。
    • good
    • 0
この回答へのお礼

ありがとうございました。
理解できました。

お礼日時:2008/06/20 19:23

参考書はwhileループとdo-whileループの違いを示す例では無いのでしょうか?


$flgには、Falseが代入されていますので、一度だけ実行された後、反復されずにユーザIDの表示行が実行されます。
trueとfalseを逆にすれば、無限ループに^^;
(でも、$flgの値を設定してるのは、doの後ってのがよくわからないが^^;)

printやvar_dumpで変数の内容を表示させれば、どのような値が入っているか確認できます。
print "username = $username\n";
print "db_data[0] = ".$db_data[0]["username"]."\n";
var_dump($db_data[0]["username"] == $username);
    • good
    • 0
この回答へのお礼

ありがとうございました。
理解できました。

お礼日時:2008/06/20 19:23


$flg = true
は ただの代入文だよ?

== が単に文字列の比較にも使えるだけの話じゃないのかな

http://www.php.net/manual/ja/control-structures. …
http://www.php.net/manual/ja/language.operators. …


あと関係ないけど
>$flg = FALSE;
>    //$flgには、なにもいれない。
これは誤り。
何も入れない場合は"NULL"
http://www.php.net/manual/ja/language.types.null …
FLASEだと一般的には0という「値」が入るよ
    • good
    • 0
この回答へのお礼

早速のお返事ありがとうございます。勉強不足ですみません!
もしも、宜しければお答え願います。

if($db_data[0]["username"] == $username){ $flg = true;}
if($db_data[1]["username"] == $username){ $flg = true;}
if($db_data[2]["username"] == $username){ $flg = true;}
この意味なんですが
もしも、$db_data[0]["username"]と$usernameが一致した場合、$flgにtrueを代入する
という意味で正しいでしょうか?
また
$db_data[0] = array("username" => "abcdefg0");
$db_dataという箱の[0]の列のusernameというキーには、abcdefg0という値が入っていると勝手に解釈してしまっています。正しいでしょうか?

そうするとabcdefg0とランダムIDで作られた$usernameが偶然一致する?
という意味???

勝手ばかりすみません!

お礼日時:2008/06/20 15:39

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!