• ベストアンサー

PHPの基礎的なことなんですが・・・

初心者です。とある参考書をみて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 . "です。";

質問者が選んだベストアンサー

  • ベストアンサー
  • tom7net
  • ベストアンサー率66% (2/3)
回答No.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だったらもう一回ループ 事前に配列に代入してる値と、乱数で生成された値が一致しちゃった場合、もう一回乱数を作ってみる。ですかね。 質問の内容からですと、連想配列とかの問題でしょうか? 見当違いのこと書いてたらすいません。

future-boy
質問者

お礼

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

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • Nii
  • ベストアンサー率48% (79/162)
回答No.2

参考書は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);

future-boy
質問者

お礼

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

すると、全ての回答が全文表示されます。
  • SAYKA
  • ベストアンサー率34% (944/2776)
回答No.1

? $flg = true は ただの代入文だよ? == が単に文字列の比較にも使えるだけの話じゃないのかな http://www.php.net/manual/ja/control-structures.if.php http://www.php.net/manual/ja/language.operators.comparison.php あと関係ないけど >$flg = FALSE; >    //$flgには、なにもいれない。 これは誤り。 何も入れない場合は"NULL" http://www.php.net/manual/ja/language.types.null.php FLASEだと一般的には0という「値」が入るよ

future-boy
質問者

お礼

早速のお返事ありがとうございます。勉強不足ですみません! もしも、宜しければお答え願います。 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が偶然一致する? という意味??? 勝手ばかりすみません!

すると、全ての回答が全文表示されます。

関連するQ&A