※ ChatGPTを利用し、要約された質問です(原文:PHP、初心者なのですが)
PHP初心者が練習中のプログラムでの数字の位置一致の判定がうまくいかない問題について
このQ&Aのポイント
PHP初心者が練習中のプログラムで、num1とnum2の入力値の各桁の数字が等しくその数字の位置がすべて同じなら「4個」という表示を、3つだけ等しくその数字の位置が同じなら「3個」という表示をするようにしたいが、うまくいかない問題が発生している。
具体的な例として、1234(num1)1239(num2)という場合、本来は「3個」という表示になるはずだが、「4個」という表示が出てしまう。
正しい表示にするためにはどのように修正すればよいか、アドバイスをお願いしたい。
練習で、簡単なプログラムをいろいろ作成していて、現在下のようなプログラムを作成しています。
<?php
session_start();
$_SESSION['num1']=$_POST['num1']; //POSTで送られたnum1をセッション変数に格納$_SESSION['num2']=$_POST['num2']; //POSTで送られたnum2をセッション変数に格納
//////////// 数字もその位置も一致している数 //////////////
$num1S;
////////////num1の各桁の数字//////////////
$X1=$num1 % 10; //num1の一の位の数字$number1=$num1 - $X1;
$X2=($number1 % 100)/10; //num1の十の位の数字
$number1=$number1 - $X2 * 10;
$X3=($number1 % 1000)/100; //num1の百の位の数字
$number1=$number1 - $X3 * 100;
$X4=$number1 / 1000; //num1の千の位の数字
////////////num2の各桁の数字//////////////
$X2_1=$num2 % 10; //num2の一の位の数字
$number2=$num2 - $X2_1;
$X2_2=($number2 % 100)/10; //num2の十の位の数字
$number2=$number2 - $X2_2 * 10;
$X2_3=($number2 % 1000)/100; //num2の百の位の数字
$number2=$number2 - $X2_3 * 100;
$X2_4=$number2 / 1000; //num2の千の位の数字
if($_SESSION['num1']==$_SESSION['num2']){
//num1とnum2の各桁の数字が全て一致してればnum1S=4
$num1S=4;
}else if((($X1==$X2_1)&&($X2==$X2_2)&&($X3==$X2_3))||(($X1==$X2_1)&&($X2==$X2_2)&&($X4==$X2_4))||(($X2==$X2_2)&&($X3==$X2_3)&&($X4==$X2_4))){
//num1とnum2の各桁の数字3つだけ一致してればnum1S=3
$num1S=3;
}
?>
<html>
<head>
<title>練習</title>
</head>
<body>
<form method="POST" action="./practice.php/">
<input type="text" name="num1" maxlength="4">
<input type="text" name="num2" maxlength="4"><br>
<input type="submit" value="チェック" name="check"><br>
<input type="submit" value="クリア" name="clear"><br>
<?php
if(isset($_POST['check'])){ //チェックボタンが押されると
if($num1S==4){
echo "4個";
}else if($num1S==3){
echo "3個";
}
}
if(isset($_POST['clear'])){ //クリアボタンが押されると
$_SESSION=array();
session_destroy();
}
?>
</form>
</body>
</html>
(出力例1)
1234(num1)1234(num2)
[チェックボタン]
[クリアボタン]
4個
(出力例2)
1234(num1)1239(num2)
[チェックボタン]
[クリアボタン]
3個
私は、もしnum1とnum2の入力値(4桁)の各桁の数字が等しくその数字の位置がすべて同じなら「4個」という表示を、3つだけ等しくその数字の位置が同じなら「3個」という表示をするようにしたいのですが、後者の表示がちゃんと出来ません。(出力例2)という結果にもなるのですが、1234(num1)5678(num2)というように、全く違う数字でも「3個」という表示が出てきてしまいます。
ちゃんと表示させるにはどうすれば良いでしょうか?
長文で分かりにくくなってしまいましたが、ご助力お願いします。
お礼
ちゃんと表示できました! こういうやり方もあるんですね。 とても参考になりました。