2012-01-27 6 views
0

У меня есть класс статей с несколькими частными варами. Затем я пытаюсь открыть старую базу данных DBF (преобразованную в CSV) и заполнить некоторые поля из CSV для моей статьи.Массив объектов возвращает пустой массив?

Как у меня есть 4747 статей в CSV-файле, я пытаюсь создать массив статей.

Как бы то ни было, если я повторяю свои статьи из массива сразу после их написания, это выглядит хорошо. Тем не менее, когда цикл 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

Вам нужно создать новый экземпляр $ статьи для каждой итерации массива и в этом случае нет смысла в прохождении $ статьи в качестве параметра.

Просто сделать что-то вроде следующих

 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 статей, а не только для одного, а затем ожидать чудес :) – Balkyto

+0

@Balykto вы используете цикл while, создавая объект, в котором он находится, а затем присваиваете этот объект массиву. В ПО нет чудес. Просто переменная область. – Kevin

Смежные вопросы