2017-06-21 53 views
0

我有一個超過10K的json文件的目錄,我需要解析它們。解析函數適用於1個文件,但我看不到如何循環目錄中的每個文件。如何`file_get_contents()`多個文件?

CONTROLER:

public function parseFile() 
{ 
    $em = $this->getDoctrine()->getManager(); 
    $em->getRepository('NcstoxBundle:JsonTextMining'); 

    foreach (glob('*.json') as $file) { 

     set_include_path('/home/landreau/workspace/NCSTOX/web/assets/json/sample-json'); 
     $json = file_get_contents($file, FILE_USE_INCLUDE_PATH); 
     $array = json_decode($json, true); 
     var_dump($json); 
     print_r($array); 


     foreach ($array as $item) { 
      $jsonTextMining = new JsonTextMining(); 
      $jsonTextMining->setSolrId($item['id']); 
      $jsonTextMining->setOriginalPaper($item['Original_paper']); 
      $jsonTextMining->setAnnotatedFile($item['Annotated_file']); 
      $jsonTextMining->setTitle($item['Title']); 
      foreach ($item['Molecule'] as $mol) { 
       $jsonTextMining->setMoleculeName($mol['Main name']); 
      } 
      $jsonTextMining->setSynonymName($item['Molecule'][0]['Synonyms']); 
      $jsonTextMining->setKeyword($item['ToxKeywords']); 
      $jsonTextMining->setImportantSentence($item['Important_sentences'][0]); 


      $em = $this->getDoctrine()->getManager(); 
      $em->persist($jsonTextMining); 
     } 
    } 
    $em->flush(); 


    return new Response('Saved new document with id '); 
} 

我試圖​​3210功能,但不保存任何循環結束。

有人知道更好的語法來遍歷目錄中的所有文件,然後file_get_contents()他們?

+1

使用文件系統的symfony組件到該目錄中讀取所有文件,然後得到每個文件的內容。 –

+0

謝謝我只是看着它的文檔,它可能是一個很好的解決方案,我學到了一些東西 – Gy0m

回答

0

我傾向於使用DirectoryIterator來循環目錄中的文件,因爲它爲您提供了所有可能執行的各種解析的內置方法。只是目錄名實例,然後遍歷它:

foreach (new DirectoryIterator('/path/to/files') as $file) { 
    if ($file->getExtension() === 'json') { 
     $array = json_decode(file_get_contents($file->getPathname()), true); 
     .... 
    } 
} 
+0

這個解決方案似乎是一個很好的,但現在我得到一個錯誤'警告:爲foreach()'提供的無效參數爲我的其他循環,在 – Gy0m

+0

之前工作正常 –

+0

它是'foreach($ array作爲$ item){' – Gy0m

相關問題