• ベストアンサー

While文を使って配列の中身を全て取り出すには

よろしくお願いします。 $data=file("./log.txt"); echo "$data[0]<br>"; echo "$data[1]<br>"; echo "$data[2]<br>"; -----表示結果----- おはよう こんにちは こんばんは ------------------ 上記のプログラムを、行数が多いことを想定して While文を使い$dataの中身が無くなるまで log.txtのデータを全て表示するようにしたいと考えているのですが、 While文の条件部分をどのように記述いていいのか困ってます。 ご指導お願いします。

  • PHP
  • 回答数3
  • ありがとう数8

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

  • ベストアンサー
  • sanpee
  • ベストアンサー率50% (1/2)
回答No.1

こんばんわ、mega-akiさん ちょっと質問と違いますがwhileを使わない別の書き方があります。 私はあまりwhileを使わず配列の展開にはforeachを多様してます。 == $data=file("./log.txt"); foreach($data as $value){ echo "$value<br>\n"; } == こう書くことで配列$dataの要素がなくなるまでループが起こります。 ($data as $value)は$dataの要素を順次$valueへ格納してくれます。 どうしてもwhileを使うことを考えるとなると push()関数とかを使うことになるのかな? 参考になれば幸いです。 では。

mega-aki
質問者

お礼

早速の回答ありがとうございます。 まだPHPの勉強を始めたばかりなので foreachまで頭が回りませんでした。 なるほど!と言う感じです。 大変参考になりました。

その他の回答 (2)

  • kirin_f
  • ベストアンサー率51% (44/85)
回答No.3

配列の中身を順番に処理していくのは、いろいろな方法があります。 #1さんの方法もそのひとつです。単純に表示させるだけならforeachが一番よいと思います。 参考までにその他の方法を書きますね。 ・forを使って for($i = 0; $i < count($data); $i++){ echo $data[$i] . "<br>\n"; } ・whileを使って $i = 0; while($i < count($data)){ echo $data[$i] . "<br>\n"; $i++; } whileを使う方法はあまり使わないかも知れないですね(^^) ただ、方法として知っておくと他のことにも応用がきくので一応書いときました

mega-aki
質問者

お礼

回答ありがとうございます。 一つの事をするにも色々な方法があるんですね。 大変参考になりました。 色々と応用できるよう頑張ります。

noname#8330
noname#8330
回答No.2

perlでいいの? それっぽい雰囲気はあるけど・・・ ファイルの扱い方が妙だし、シェルっぽいけど絶対違うし。少なくとも言語位は指定しなよ。 --- 軽く書いてみたけど(例外処理とかは全然・・・ #!/usr/bin/env perl open FP,"<./ファイル名"; while ( <FP> ) { print $_,"<BR>"; } close FP; log.txt 焼肉食べたい。 パスタはもういらない。 ラーメンもあきた。 明日のごはんは何だろう? ./TEST.pl 焼肉食べたい。 <BR>パスタはもういらない。 <BR>ラーメンもあきた。 <BR>明日のごはんは何だろう? <BR>

mega-aki
質問者

お礼

回答ありがとうございます。 言語はPerlではなくPHPなので PHPのカテゴリーで質問しました。

関連するQ&A

  • シェル ファイルの中身によって特定の処理

    シェルスクリプトに関する質問です。 少しシェルで言語風なものを作ってみようと思い、作成したのですが、上手くいかないので質問させて頂きました。内容は、特定の文字がファイルに記載されているか判定して、 特定の文字だったら処理をするというものです。 現在、このようなソースになっています↓ #!/bin/sh - #ファイルを設定(仮) file_name="dummy.sh" #行数を変数へ格納 line=$(wc -l ${file_name}) #行数をlog.txtへ書き込む echo ${line} > log.txt #行数以外にファイル名があるので削除 sed -i "s/$file_name//g" log.txt #行数を格納 Line=$(cat log.txt) i=0 #全ての行を変数へ格納 #ここが問題 配列に変数が使えない!? while [ $i = ${Line} ] do array[$i]=$(sed -n "${i}p" ${file_name}) expr `${i} + 1` done # 格納した変数をチェックして、 # 指定された文字(hello)が書かれていればhelloと表示させる b=0 while [ $b = ${main_file} ] do if [ array[$b] = "hello" ] then echo "hello" fi expr `$b + 1` done ここで、配列を利用し、変数への代入が出来ませんでした。 ただ、エラーは表示されません。。。 環境はUbuntu10.10です。 何もいじっていないので、たぶん大丈夫だと思うんですが・・・ 何か解決策はありませんか? また、コレよりいい方法などがあればぜひ教えてください。

  • ループ処理について

    テキストファイルにある数字が存在するかしないかの判断をしたいですがうまくいきません、どこが悪いのでしょうか・・・。 <?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
  • while文の中にwhile文を書きたいのですが。。。

    while文の中にwhile文を書きたいのですが。。。 現在、下記ソースでプログラムを記述しております。 下記ソースですと、1回目のループのデータは抽出できるのですが、2回目のループだとデータが抽出できません。。 <? while($item0_3 = mysql_fetch_array($res0_3)){ ?> <tr> <td class="A"> <select name="work_partner_com[]"> <? while ($item5_2 = mysql_fetch_array($res5_2)) {?> <option value="<?=$item5_2["com_name"]?>"><?=$item5_2["com_name"]?></option> <? }?> </select> </td> <td class="B"> <select name="work_com[]"> <? while ($item5_3 = mysql_fetch_array($res5_3)) {?> <option value="<?=$item5_3["name"]?>"><?=$item5_3["name"]?></option> <? }?> </select> </td> </tr> <? } ?> 1回目のwhile文で、データーベースの指定したテーブルに格納されている数 2回目のwhile文で、データーベースの指定したテーブルに格納されているマスタデータ数 ご教授いただけますでしょうか。

    • ベストアンサー
    • PHP
  • while文がうまく動かない

    a.txt a b c b.txt x y z として次のプログラムを実行 open(A,"<a.txt"); open(B,"<b.txt"); while($a=<A>){ while($b=<B>){ print "$a>>>$b<br>"; } } close(A); close(B); すると実行結果が以下のようになりました。 a>>>x a>>>y a>>>z 上の結果だけではなくてa.txtがbの時cの時も出力されるつもりで書いたのですがなぜかaの時しか出力されません。どなたか理由が分る方いませんか? ちなみに Linux FedoraCore2 perl5 を使用しています。

    • ベストアンサー
    • Perl
  • while文を使って、ローンの残高を計算する

    車のローンの残高推移をWHILE文を使って出したいと考えております。 車本体の金額が550万円で 金利が5%の場合 ローン残高がどれくらいなのか表示させたいです。 <? $i = 5500000; $r = 0.05; while ($i < 0){ echo $i-($i*$r)."<br>"; } ?> 上記のコードだと、エラーも何も表示されません。 なぜなのでしょうか。 回答よろしくお願いします。

    • 締切済み
    • PHP
  • phpのwhileで希望通りの動作ができない

    以下のようにしてみたのですが「データはありません」という文章が何度も(何行も)表示されてしまいました。 while($test = mysql_fetch_array($sql, MYSQL_ASSOC)){ $name = $test[name]; if($cnt > 0){ echo "データはありません"; echo '<br>'; } elseif(empty($name)){ echo "データはありません"; echo '<br>'; } else{ $name = $name.'<br>'; } } whileで繰り返した結果、すべての$nameが「$cnt > 0」か「empty」の場合だけ、「データはありません」と一回だけ表示したいのですが、どのようにしたらいいでしょうか?

    • ベストアンサー
    • PHP
  • while文の内容を変数に取り込む方法

    PHPとMySQLを使って、顧客管理システムを作っています。 While文の内容を、変数に取り込む方法についてお尋ねします。 MySQLに登録されている名簿の名前を表示させるスクリプトが下記なのですが、 while ($row_s = mysql_fetch_array($rs_s)){ echo $row_s[name]. "<br>¥n"; } ここでechoされる内容を、変数に入れることはできないかと思っています。 下記のようにやると、一番最後の名前だけが変数 $name に入ってしまいます。 while ($row_s = mysql_fetch_array($rs_s)){ $name = $row_s[name]. "<br>¥n"; } 全部を取り込むには、どうすればいいでしょうか?いろいろやってみたのですが、うまくいきません。 わかる方いたら、教えて下さい。

    • ベストアンサー
    • PHP
  • ログデータの改行を非表示に

    自分のメモ用に、簡単な掲示板を作りました。 ログデータだけを見た時、見やすいよう(長文なので)に1文ずつに改行を入れています。 -----ログデータの例(1文ごとに\nで改行)-------- 11月11日、支払なんちゃらかんちゃら~ 11月12日、会議なんちゃらかんちゃら~ 11月23日、休みなんちゃらかんちゃら~ ---------------------------------------- これを以下のように表示させたく -----表示------------------ 11月11日、支払なんちゃらかんちゃら~ 11月12日、会議なんちゃらかんちゃら~ 11月23日、休みなんちゃらかんちゃら~ --------------------------- その表示部分のプログラムは $log = file("log.txt"); foreach($log as $val){  if(!empty($val)){   echo "{$val}<br>";   } } と記述しているのですが、改行だけの行も表示されてしまいます。 if文を、!emptyの他に、$val!==nullや、isset($val)で試しても 改行だけの行も表示されてしまうのですが・・・ 改行だけの行は表示しないようにするにはどのように記述すればよいのでしょうか?? ご教授よろしくお願いします。

    • ベストアンサー
    • PHP
  • switch文とwhile文を用いたプログラムに関して

    swich文とwhile文を用いたプログラムについて 授業の課題で、swich文とwhile文を用いたプログラムを作りなさい。いう課題が出ました。 5桁以上9桁以下の正の整数を入力し、4で割り切れたとき、何桁の数字かを出力。4でわって1余ったとき、すべての桁の合計を出力。3余ったとき、与えられた数の逆を変数に代入し、その変数を出力(単純に表示するわけではなく、数字として表示) といったものです。 途中からの授業参加で、C言語に関する知識はほとんどありません。do文を用いたプログラムは見つけれたのですが、while文とswich文を用いろということなので、do文は使えないです。 どなたか教えていただけませんか? 今日中にわからないとちょっとやばいです・・・。 よろしくお願いします

  • while文を使った問題なのですが・・

    はじめまして。 C言語初心者です。 while文のところまでやっとたどり着きましたが、次の問題がどうしても解くことができません。 ********************** 整数を入力し、入力された整数の数だけ「*」を横一列に表示し、最後に改行するプログラムを while 文を使って作りなさい。 但し、0または負の値が入力された場合は、「*」は表示せず、改行のみを表示すること。 ********************** #include<stdio.h> int main(void) { int a; scanf("%d", &a); while(a!==0){ printf("%d*\n", a); } } こんな感じでつくってみたのですが、whileの条件部分がさっぱり分かりません。 int a の数字文だけ、*で表示する、というのも方法が思いつきません。 アドバイス、お願いいたします。