• ベストアンサー

配列にきちんと入れる方法

txtの行数字が合っている数字だけ(7.6.4.1)抜いて上から順に配列に入れたいのですが、何か微妙に違う結果になります。 7 7 10 7 6 6 4 4 5 4 9 4 1 1 2 1 $abc=file("1.txt"); for($l=0;$l<count($abc);$l++){ $def=explode("\t",$abc[$l]); if($def[0]==$def[1]){ $ll=array($def[0]); print_r($ll); }} Array ( [0] => 7 [1] => 6 [2] => 4 [3] => 1 ) 上記のようなブラウザ結果にしたいのですが、別々に配列が表示されてしまいます。どう記述すればこの結果になるでしょうか?ご教授ください。

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

  • ベストアンサー
  • suzuki-_-
  • ベストアンサー率77% (152/195)
回答No.1

まずは for($l=0;$l<count($abc);$l++){~} について理解していきましょう $i=0 は初期値としての設定 $l<count($abc) はfor文を実行する条件 (特に命令がない限り、基本的にはこの条件が成り立たなくなったらforを抜けます) $i++ はforの{}内の処理を行う度に実行する内容です 例えば count($abc) が10だとしたら、 $i=0からスタートすると条件が成り立たなくなるまでに 今回の場合は$i++($iに1プラス)を10回必要とするので、 forの{}内の命令を10回繰り返すことになります ここを理解したら次です 質問者さんが記述したforの{}内に以下のものがあります $ll=array($def[0]);//・・・(1) print_r($ll);//・・・(2) これを簡単に説明すると  (1) $ll は配列として$def[0]"のみ"で出来たものにする  (2) $llを出力する となりますが、for文内にあるので、条件が成り立っている最中は毎回行われています (1)は毎回"追加"しないと全ての情報を統合したデータにはなりません そして、結果を一回出力したいだけなので、(2)を毎回行う必要はありませんよね 以上を踏まえた上で、下記のような例になります $abc=file("1.txt"); $ll = array();//$llは配列だよと宣言しておく for($l=0;$l<count($abc);$l++){ $def=explode("\t",$abc[$l]); if($def[0]==$def[1]){ array_push($ll,$def[1]);//配列$llに$def[1]を追加していく } } print_r($ll);//forが抜けた後に出力する

bhdkgo
質問者

お礼

なるほど、$ll=array()は $llは配列だよと宣言しておく為に使うんですね・・・。 ()の使い方の意味がいまいち分からなかったので、説明の流れと照らし合わせて理解できました。 分かりやすい丁寧な説明ありがとうございました!

その他の回答 (1)

回答No.2

それではダメかと、配列を毎回作るだけだから。 下記のようにすれば良いのでは? $abc=file("1.txt"); $ll = array(); for($l=0;$l<count($abc);$l++){ $def=explode("\t",$abc[$l]); if($def[0]==$def[1]){ $ll[]=$def[0]; } } print_r($ll);

bhdkgo
質問者

お礼

$ll[]こういう書き方もあるんですね・・・勉強になりました!

関連するQ&A