2012-01-27 18 views
0

私はいくつかのプライベートバールを持つ記事クラスを持っています。それから、私は古いDBFデータベース(CSVに変換された)を開こうとしていて、CSVからいくつかのフィールドを私の$ articleに入力しようとしています。オブジェクトの配列が空の配列を返しますか?

私はCSVファイルに4747個の記事があるので、記事の配列を作成しようとしています。

記事に書かれた直後に記事をエコーし​​た場合、それはうまく見えます。しかし、whileループが閉じていると、配列の縫い目は空の行で埋められることになります。なぜなら、countは配列のメンバーを正確に4747個表示するからです。

実際には配列は$columnsへのポインタであり、ループが終了するとすぐに何も指さないので、何も得られません。 :)

オブジェクトの配列に正確なデータを書き込むためにPHPを(もしできれば)強制することはできますか?

public function readCSVFile ($article) 
{ 
    $row=0; 
    $singlecolumn=''; 
    $columns = ''; 
    $articlesarray = array(); 
    //$columns = array(); 
    //echo $current_file_path;// $this->csvtoopen = $_POST['csvtoimport']; 
    if (($handle = fopen("e:\\Tmp\\DBF2CSV\\tartikli.csv", "r")) != FALSE) 
    { 
     while (!feof($handle)) 
     { 
      $columns = fgetcsv($handle, 1000, ","); 
      $article->id=$columns[0]; 
      $article->name=$columns[1]; 
      $article->unit=$columns[2]; 
      $article->price=$columns[14]; 
      $article->stack=$columns[20]; 

      $articlesarray[$row]=$article; 
      //echo $articlesarray[$row]->name; //---> Works fine 
      $row++; 
     }  
    } 

    echo count($articlesarray); 
    for ($i=0;$i<count($articlesarray);$i++) 
    { 
     echo $articlesarray[$i]->name; //----> does not work any more 
    } 
    fclose($handle); 

    return $articlesarray;  
} 

答えて

0

$ articleの新しいインスタンスを配列の繰り返しごとに作成する必要があります。その場合、$ articleをパラメータとして渡す必要はありません。

ちょうど

 while (!feof($handle)){ 
     $columns = fgetcsv($handle, 1000, ","); 
      $article = new Article(); <--------------- this is missing 
      $article->id=$columns[0]; 
      $article->name=$columns[1]; 
      $article->unit=$columns[2]; 
      $article->price=$columns[14]; 
      $article->stack=$columns[20]; 

      $articlesarray[$row]=$article; 
      //echo $articlesarray[$row]->name; //---> Works fine 
      $row++; 
     } 

    } 
+0

TNXハサン・ハーンを、次のような何かを。そのように動作します:)実際には、4747記事の4747記事を作成するのは理にかなっています。ただ1つではなく、奇跡を期待しています:) – Balkyto

+0

@Balykto whileループを使用してオブジェクトを作成し、そのオブジェクトを配列に割り当てます。ソフトウェアには奇跡はありません:)。変数スコープだけ。 – Kevin

関連する問題