2016-09-23 97 views
-1

我有下面的代碼打開一個CSV文件,並將結果輸出到一個JSON格式。在拆除最後一個項目逗號while循環

不過,我想從while循環中刪除最後,。有人可以解釋我如何用我當前的代碼做到這一點?

<?php 
ini_set('max_execution_time', 300); 
$wantedColumns = array(3); 
$row = 1; 
if (($handle = fopen("data.csv", "r")) !== FALSE) { 

    echo '{ 
     "data": 
     ['; 

     while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { 
     $num = count($data); 
     if ($row == 1) { 
      echo '<tr>'; 
     }else{ 
      echo '<tr>'; 
     } 

     for ($c=0; $c < $num; $c++) { 
      if (!in_array($c,$wantedColumns)) continue; 



      if(empty($data[$c])) { 
       $value = "&nbsp;"; 
      }else{ 
       $value = $data[$c]; 
      } 

      if ($row == 1) { 
      }else{ 
       echo ''.$value.','; // comma added here 
      } 
     } 

    if ($row == 1) { 
     echo '</tr>'; 
    }else{ 
     echo '</tr>'; 
    } 

    $row++; 
    //$value= substr($value, 0, -1); 
    } 
      echo ' ] 
       }'; 

    echo '</tbody></table>'; 
echo '</center>'; 
    fclose($handle); 
} 
?> 
+2

'$值= SUBSTR($值,-1,1 );'或'$ value = rtrim($ value,',');' –

+0

感謝您的回覆,約翰 - 這是否應該替換標有'//這裏添加的逗號'的位置? – michaelmcgurk

+4

您是否試圖將CSV文件轉換爲JSON字符串?我可以建議*不*手動構建您的JSON?我建議你建立一個數組,然後使用'json_encode()'。 –

回答

4

在做這樣的事情,我喜歡推到一個數組中的值,然後用破滅加入他們,

$values = array(); 
    for ($c=0; $c < $num; $c++) { 
     if (!in_array($c,$wantedColumns)) continue; 



     if(empty($data[$c])) { 
      $value = "&nbsp;"; 
     }else{ 
      $value = $data[$c]; 
     } 

     if ($row == 1) { 
     }else{ 
      $values[] = $value; 
     } 
    } 

    echo implode(',', $values); 
+0

更好的解決方案.. – devpro

+0

@MajorCaiger謝謝你。我試圖在我的解決方案中包含這一點,但沒有成功。我只想要最後的'''被刪除。 – michaelmcgurk

+0

@michaelmcgurk:關鍵是,你不需要在你的循環中回顯值,而是將你想要的結構建立爲一個數組,然後在後面回顯出來。 –

相關問題