2016-08-06 8 views
-2

入力ファイルを以下のフォームで操作できる一連のオブジェクトに変換しようとしています。初期化後にPHPクラスの値にアクセスできない

arabian_sea_area = { 
    1926 1927 1931 1932 1933 2029 2030 
} 

gulf_of_aden_sea_area = { 
    1925 2024 5285 5286 
} 

自衛隊

<?php 

$all_areas = array(); 
if (($handle = fopen("area.txt", "r")) == False) 
{ 
    die("failed to open file\n"); 
} 

while (($line = fgets($handle)) !== FALSE) 
{ 
    if (ctype_alpha($line[0])) 
    { 
     $line= explode(" ",$line); 
     // echo($line[0]."\n"); 

     $area = $line[0]; 
     $IDs = explode(" ", fgets($handle)); 
     $IDs[0] = ltrim($IDs[0], ' '); // trying to remove tab from first ID 
     $all_areas[$area] = $IDs; 
     //array_push($all_areas, $temp); 
    } 
} 
//echo("a\n"); 
print_r($all_areas["arabian_sea_area"]); 
//var_dump ($all_areas); 

?> 

値はコメントアウトデバッグ行に正しく印刷されますが最後でのvar_dumpのために何を印刷に失敗。

編集:これは不明で、私がしようとしていたのは最初の行(つまりarabian_sea_areaなど)というタイトルのオブジェクトにリンクされたマスター "all_areas"配列を作成し、後のスクリプトのために各エリアごとにアルゴリズム的に計算されます。あなたは$の一時変数を作成している

の1-

if (ctype_alpha($line[0])) 
{ 
    $line= explode(" ",$line); 
    //echo($line[0]."\n"); 

    $temp = $line[0]; 
    $temp = new Area; 
    $temp->filler($line, $handle); 
} 

いますが、メインの配列$ all_areasにプッシュするのを忘れ:

+0

詳細を追加して、必要なものを正確に強調してください。現在書かれているとおり、あなたが求めていることを正確に伝えるのは難しいです。この質問を明らかにするには、[How to Ask](http://stackoverflow.com/help/how-to-ask)ページを参照してください。 – Script47

答えて

2

は、あなたのコードで多くの問題があります。存在しないarray_push

2 -

var_dump ($arabian_sea_area); 

$のarabian_sea_areaを使用しています。 メインアレイ$ all_areasを印刷することを意味しましたか?

、3-勧告:

エラーで

(エコー( "ファイル\ nを開くことができませんでした");)その金型を使用することをお勧めします( "ファイル\ nを開くことができませんでした");エコーの代わりに。 dieはスクリプトの残りの部分の実行を停止します。

- UPDATE -

私は正常に動作する必要があります方法でコードを編集した:

class Area { 
    public $area_name; 
    public $IDs = array(); 

    public function filler($line, $handle) { 
     $this->area_name = $line[0]; 
     //echo($this->area_name."\n"); 

     $this->IDs = explode(" ", fgets($handle)); 
     //print_r($this->IDs); 
    } 
} 
$all_areas = array(); 
if (($handle = fopen("area.txt", "r")) == False) 
{ 
    die("failed to open file\n"); 
} 

while (($line = fgets($handle)) !== FALSE) 
{ 
    if (ctype_alpha($line[0])) 
    { 
     $line= explode(" ",$line); 
     // echo($line[0]."\n"); 

     $temp = $line[0]; 
     $temp = new Area; 
     $temp->filler($line, $handle); 

     array_push($all_areas, $temp); 
    } 
} 
//echo("a\n"); 
var_dump ($all_areas); 

あなたは/フィルタに空の値を削除するためにそれを更新したい場合があります。

+0

ありがとうございました! $ all_arraysをarea_nameとIDを保持する連想配列にする方法はありますか? – CenturionSC2

+0

あなたは何を意味するのか分かりません。 $ all_arraysは、Areaオブジェクトの配列になります。 お探しの情報をご記入ください。 – TestCandidate

+0

私は実際にクラスを全く必要としませんでした。その考え方は、アラビア海のような地域名を入力し、その地域に対応するIDの配列を出力できるようにすることでした。現在は意図したとおりに動作していますが、タブまたは空のIDの後続のインデックスを削除することはできません。そして、あなたが本当に助けてくれてありがとう、私は特にプログラミングとPHPの初心者だと言うことができます! – CenturionSC2

関連する問題