こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

txtの行数字が合っている数字だけ(7.6.4.1)抜いて上から順に配列に入れたいのですが、何か微妙に違う結果になります。
77
107
66
44
54
94
11
21
$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

)
上記のようなブラウザ結果にしたいのですが、別々に配列が表示されてしまいます。どう記述すればこの結果になるでしょうか?ご教授ください。

投稿日時 - 2007-02-17 01:05:03

QNo.2759085

すぐに回答ほしいです

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

まずは 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が抜けた後に出力する

投稿日時 - 2007-02-17 03:19:24

お礼

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

投稿日時 - 2007-02-17 21:49:55

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.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);

投稿日時 - 2007-02-17 03:19:46

お礼

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

投稿日時 - 2007-02-17 21:51:38

あなたにオススメの質問