初心者です。とある参考書をみて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 . "です。";
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だったらもう一回ループ
事前に配列に代入してる値と、乱数で生成された値が一致しちゃった場合、もう一回乱数を作ってみる。ですかね。
質問の内容からですと、連想配列とかの問題でしょうか?
見当違いのこと書いてたらすいません。
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);
No.1
- 回答日時:
?
$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という「値」が入るよ
早速のお返事ありがとうございます。勉強不足ですみません!
もしも、宜しければお答え願います。
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が見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- MySQL php テーブルを作れない 2 2022/11/17 18:22
- PHP PHP MySQLに画像を直接保存 2 2022/06/05 11:50
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- PHP php エラー 2 2022/10/23 16:43
- Visual Basic(VBA) InputBoxでキャンセルボタンを押したらファイル自体を閉じたい 3 2022/07/23 17:52
- その他(プログラミング・Web制作) pythonでDBのカラム名で取得したオブジェクトの値を表示したい 1 2022/05/13 03:41
- その他(開発・運用・管理) Windowsバッチファイルでリモートデスクトップを自動ログインするが確認画面が出る対処方法 1 2022/12/19 15:48
- PHP php ログイン 1 2022/11/01 00:24
- その他(コンピューター・テクノロジー) (コマンドプロンプト)コマンドプロンプトのactiveについて 2 2022/07/16 17:21
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHPからCSVをアップロード後、m...
-
複数行のデータのPOST処理に関して
-
PHPでサーバー上の書き換えたht...
-
別ファイルの構造体の値を読み...
-
CSVデータの行数カウントをした...
-
複数ファイルで、それぞれの行...
-
Resource id #3 と表示されま...
-
PHPでCSVの一部の行を編集したい
-
自動で番号を振りたい
-
C言語でCSVファイルの行数を読...
-
バイナリファイルの内容を、そ...
-
foreachのなかで次のキーを参照...
-
Delphiで別unitで宣言した「TAr...
-
VB.NET で 二次元のハッシュは...
-
PHPにてクラスを配列にすること...
-
ネストが深い時のforeachはどう...
-
連想配列で値が空だったら、要...
-
重複確認
-
am()の使い方
-
プルダウンメニューにDBの内容...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
別ファイルの構造体の値を読み...
-
Resource id #3 と表示されま...
-
stdClass Objectを連想配列のよ...
-
CSVデータの行数カウントをした...
-
ヒアドキュメントの中のfor文
-
複数行のデータのPOST処理に関して
-
C言語でCSVファイルの行数を読...
-
While文を使って配列の中身を全...
-
行数が30万件ほどあるCSVから、...
-
CSVファイルの最終行のデー...
-
csvの内容を行単位で削除したい
-
バイナリファイルの内容を、そ...
-
doxygenを使用する環境について
-
PHPで、CSVファイルを、指定し...
-
FortranのOPEN文
-
csvファイルを読み込み→上書き...
-
PHPでCSVの一部の行を編集したい
-
ラジオボタンのチェックの付け方。
-
Ethnaでのsection使用法
-
CSVデータを正規表現で抜き出せ...
おすすめ情報