• 締切済み

ループ処理について

テキストファイルにある数字が存在するかしないかの判断をしたいですがうまくいきません、どこが悪いのでしょうか・・・。 <?php $log=file("1.txt"); for($i=1;$i<count($log);$i++){ echo"<a href=1.php?no=$i>$i</a> ";} echo"<BR><BR><BR><BR><BR>"; if ($_GET["no"]) { $no = $_GET["no"]; $log=file("1.txt"); for($i=0;$i<count($log);$i++){ $list=explode("<>",$log[$i]); if($no==$list[1]){echo"$list[0]"."はOk<BR>";} elseif($no!=$list[1]){echo"";} } if($no!=$list[1]){echo"存在しません";} } ?> 1.txtの中身は 7<>7<> 8<>7<> 5<>5<> 6<>5<> 3<>3<> 4<>3<> 1<>1<> 2<>1<> 右の数字(7・5・3・1)が存在確認対象で、 ?no=数字で呼び出し、getでの呼び出し数字が右に存在すれば左の数字を表示します。 存在しなかったら 存在しません という言葉を1回だけ表示します。 no=1とno=2 no=4 no=6だけ上手くいくのですが、他はokと存在しませんが両方混在してしまいます。no=3 5 7も1 2のようにしたいのですが、 どう記述すれば上手い具合にいくでしょうか? よろしくお願い致します。

  • PHP
  • 回答数2
  • ありがとう数2

みんなの回答

  • calltella
  • ベストアンサー率49% (317/635)
回答No.2

10行目から if($no==$list[1]){ $value= $list[0]; } これでいかがですか?

bhdkgo
質問者

お礼

回答ありがとうございます、勉強になりました!

  • calltella
  • ベストアンサー率49% (317/635)
回答No.1

<?php $log=file("1.txt"); for($i=1;$i<count($log);$i++){ echo"<a href=".$_SERVER['PHP_SELF']."?no=$i>$i</a> ";} echo"<BR><BR><BR><BR><BR>"; if ($_GET["no"]) { $no = $_GET["no"]; for($i=0;$i<count($log);$i++){ $list=explode("<>",$log[$i]); if($no==$list[0]){ $value= $list[1]; } } if ($value){ echo $value."はOK<BR>"; }else{ echo "存在しません"; } } ?> あまり綺麗なコードではないですがこれでいかがでしょう?

bhdkgo
質問者

補足

2を押すと1の内容が、4は3が、6は5が表示されてしまいます。 2・4・6はそもそも存在しないので(list1とnoを比較しているので)、存在しませんと表示したいのですが・・・。

関連するQ&A

  • txtを読み込んでtableに入れる方法

    3 3 村田 6 3 岡田 5 5 木村 1 1 田中 2 1 山田 4 1 江川 1.txtこのタブ区切りファイルで真ん中の列の 335111で 同じ数値の行を<table><td></td></table>に入れたいと思ってます。 <table><td> 3 村田 6 岡田 </td></table> <table><td> 5 木村 </td></table> <table><td> 1 田中 2 山田 4 江川 </td></table> 真ん中の列は同じ数字は上下隣同士以外は来ません。同じ数字は絶対に離れずくっつくことを前提です。1番左列は同数は存在しません。数値関連を比較して行くのかと調べたのですがsortなどしか出て来ず、訳が分からなくなってきました。どのように記述すればいいでしょうか?ご教授ください。 $log=file("1.txt"); for($i=0;$i<count($log);$i++){ echo"<table border=1><td>"; $list=explode("\t",$log[$i]); if($list[0]==$list[1]){//親なら echo"ー親ー<BR>\n"; echo"$list[0]<BR>\n"; echo"$list[2]<BR>\n"; echo"</td></table>"; } if($list[0]!=$list[1]){//子なら echo"ー子ー<BR>\n"; echo"$list[0]<BR>\n"; echo"$list[2]<BR>\n"; } echo"</td></table>"; } これだと親子別々に・・・。

    • ベストアンサー
    • PHP
  • ループの減算表示

    下記記述 <!--start--> <?php $get_no = file_get_contents('./today-no.txt'); for($a = 1; $a < $get_no; $a++) { #一個ずつ進む echo "<a href='./next".$a.".php' target='_blank'>"; #次のページ echo "No.".$a; #ナンバーの表示 echo "</a><br>"; } ?> <!--end--> で1~指定数値の加算表示はうまくいったのですが、減算方法が分かりません for($a = 1; $a < $get_no; $a++)を for($a = $get_no; $a < 1; $a--)に変更してもうまく作動せず真っ白になってしまいました。減算するという方法は無理なのでしょうか? 詳しい方がおられましたら解説の方をよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • ループ処理でシンプルにまとめる方法を教えてください。

    (例) for ($j=0;$j<=count($arGroup)-1;$j++){ for ($i=0;$i<=count($arGroup[$j])-1;$i++){ if($j == 0){ echo "(".$number[0][$i+(count($ar)-1)].")\n"; }elseif($j == 1){ echo "(".$number[0][$i+(count($ar)-1)+(count($arGroup1))].")\n"; }elseif($j == 2){ echo "(".$number[0][$i+(count($ar)-1)+(count($arGroup1))+(count($arGroup2))].")\n"; }elseif($j == 3){ echo "(".$number[0][$i+(count($ar)-1)+(count($arGroup1))+(count($arGroup2))+(count($arGroup3))].")\n"; } } } このループ処理をもっとシンプルにしていきたいと思います。 jの数が増えていく予定)+(count($arGroup数字))が追加されていくような形になります。 どなたか教えてください。

    • ベストアンサー
    • PHP
  • 同じような処理を一つにまとめたい

    count.txt <?php $dis123=0; $dis001=0; $hoge01=0; ?> ___________ counter.php <?php $vote = $_GET[vote]; $fp = fopen("count.txt", "r+"); include("count.txt"); @flock($fp,LOCK_EX); //今現在(カウント前)の値を書き込む fputs($fp,"<?php \$dis123=$dis123; ?>\n"); fputs($fp,"<?php \$dis001=$dis001; ?>\n"); fputs($fp,"<?php \$hoge01=$hoge01; ?>\n"); //GETで得た情報からカウントした物に+1して書き込む if ($vote===dis123){ ++$dis123; fputs($fp,"<?php $$vote=$dis123; ?>\n"); } if ($vote===dis001){ ++$dis001; fputs($fp,"<?php $$vote=$dis001; ?>\n"); } if ($vote===hoge01){ ++$hoge01; fputs($fp,"<?php $$vote=$hoge01; ?>\n"); } flock($fp,LOCK_UN); fclose($fp); echo "dis123は".$dis123."点<br>"; echo "dis001は".$dis001."点<br>"; echo "hoge01は".$hoge01."点<br>"; ?> _________________________________ 処理: counter.php?vote=dis123ときたらif処理して$dis123に+1する ________________________ 今は三つだからまだ大丈夫ですが、これが増えてくると手間が多いです そこで上記の今現在の値の書き込みとIF処理の部分を代入など、なんらかの形で簡略化できませんでしょうか?大改編になっても結構です。 よろしくお願いします。 備考:PHP暦三日目です、ここまでなんだかんだがんばったと思う。

    • ベストアンサー
    • PHP
  • 外部ファイルから$a=1等の変数を読み込みたい

    <html> <body> <?php $contents = @file_get_contents('count.php'); echo $contents; ?> <span id="ck0001"><?php echo $count[ck0001] ; ?></span><br> <span id="ck0002"><?php echo $count[ck0002] ; ?></span><br> </body> </html> --------------------- count.txtの内容 $count[ck0001] = 4; $count[ck0002] = 3; こんな感じでここの値から引っ張ってきたいのですが、方法がわかりません。 備考:PHP触り始めてから今日で二日目です。

    • ベストアンサー
    • PHP
  • テキストデータから指定行の削除

    phpでサイトを作っています。 テキストデータを一行ずつ表示させ、指定した行を削除したいのですが、どうすればいいのでしょうか? -- data.txt -- aaa,data1, bbb,data1, ccc,data1, ddd,data1, -- php -- <?php $del=$_POST['del_no']; if($del!=""){ $data_all = file("data.txt"); for($i=0;$i<count($data_all);$i++){ $data_array = explode(",",$data_all[$i]); if($data_array[0]!=$del){//削除データ以外を再書き込み $txt="$data_array[0],$data_array[1],\n"; $fp = fopen("data.txt", "w"); flock($fp,1); foreach ($txt as $line) {// 1行ずつファイルへ書き込み? fwrite($fp, $line); } fclose($fp); break; } } } ?> <b>data list</b> <? $data_all = file("data.txt"); for($i=0;$i<count($data_all);$i++){ $data_array = explode(",",$data_all[$i]); echo "$data_array [0]<br />"; echo "<form method=\"post\">"; <input type=\"hidden\"name=\"del_no\" value=\"$data_array[0]\" />";//削除するデータをPOST echo "<input type=\"submit\" value=\"削除\" />"; echo "</form>"; } ?> こうすると、テキストデータが白紙になってしまいます。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • textファイルについて

    あるディレクトリーに test.txt aaa.txt があるのですが、 二つのテキストを開いて もし text.txtの3行目に http://www.goo.ne.jp/ があり aaa.txtの10行目にも http://www.goo.ne.jp/ があるとすれば aaa.txtの10行目を消したいのですが、 そんな事って可能ですか?? 色々考えたのですが、aaa.txtの10行目を消す時に 10行目を空にすると言う指定が出来なくて困ってます。 どうしてもaaa.txtの削除が出来ません。 参考までにスクリプトを載せておきます <?php $file_name = array("aaa.txt", "test.txt"); $list = fopen($file_name[0], "a+"); $delete_list = fopen($file_name[1], "r"); $listfile = file($file_name[0]); $listmax = count($listfile); $listfile = file($file_name[1]); $delete_listmax = count($listfile); if ($delete_listmax > 0){ for ($delete_line = 1; !feof($delete_list); $delete_line++){ $delete_lines = fgets($delete_list); $delete_lines = trim($delete_lines); if ($delete_lines){ if (is_file($file_name[0])){ for ($line = 1; !feof($list); $line++){ $lines = fgets($list); $lines = trim($lines); if ($lines){ if ($delete_lines == $lines){ //ここの部分がわからないです fputs($list, "あああ"); echo "O,K\n"; } } } } } } } fclose($delete_list); fclose($list); echo "\n終了\n"; ?> 詳しい方がいましたら宜しくお願いします

    • ベストアンサー
    • PHP
  • 【PHP】 重複した値を取り除く処理

    【log.txt の中身】 1,スイカ 2,メロン 3,メロン 4,ミカン 5,スイカ 6,ミカン 次の【file01.php のソース】まではやってみましたが… 【file01.php のソース】 $log = file("log.txt"); for($i=0;$i<sizeof($log);$i++){ list($log1,$log2) = explode( "," , $log[$i]); print "$log2<br>\n"; } …この様にすると次の【出力結果】の様にブラウザーに表示されてしまいます。 【出力結果】 スイカ メロン メロン ミカン スイカ ミカン 次の【出力結果】の様に、重複した値だけを取り除きブラウザーに表示させたいのですが、どうしたら良いのでしょうか?教えて下さい。 【出力結果】 スイカ メロン ミカン

    • ベストアンサー
    • PHP
  • 再帰処理で変数が戻ってきません

    下記プログラムで$viewdataの値が再帰処理時にうまく渡されません。 $actionのregistは渡されるのですが、なぜでしょうか? <html> <head></head> <?php $data_file="new_bbs.log";//ログファイル if(!isset($PHP_SELF)){$PHP_SELF=$_SERVER["SCRIPT_NAME"];} if(!isset($action)){$action=$_POST['action'];} if(!isset($viewdata)){$viewdata=$_POST['viewdata'];} ?> <body> ■TEST<br> <FORM ACTION="<?php echo $PHP_SELF; ?>" METHOD="POST" ENCTYPE="multipart/form-data" style="margin: 0px;"> <INPUT TYPE="HIDDEN" NAME="action" VALUE="regist"> <INPUT TYPE='SUBMIT' VALUE='---UP---'> <?php if($action != "regist"){ $viewdata= file_get_contents( $data_file );//ログファイルのデータ読込 echo "<br>データ:".$viewdata; }else{ echo "再帰データ:".$viewdata; } ?> </FORM> </body> </html>

    • ベストアンサー
    • PHP
  • バッチでファイルを分割する

    例えば、100行あるファイルを10行ずつに分割し、 分割後10個のファイルを作成したいと考えていますが、 なかなか思うように行きません。 是非、お知恵を拝借でできると大変助かります。 FOR /F %%i in (D:\\\\file.txt) do ( echo %%i >> outfile.txt CALL :COUNT ) exit /b :COUNT SET /a I=I+1 echo [%I%] です。 IF %I%==10 ( set I=0 ) exit /b

専門家に質問してみよう