2010-01-02 2 views
0

Я пытаюсь создать файл CSV. Я сделал это. Я поставил ниже в цикле с первой и последней строками вне цикла.Запись в файл CSV на двух столбцах

$FileHandle = fopen('tech.csv', 'a+') or die("can't open file"); 
$stringa = $item." , ".$item2."\r\n"; 
fwrite($FileHandle, $stringa); 
fclose($FileHandle); 

Тем не менее, выходит, как это в файл CSV:

a 
b 

c 
d 

Вместо того, как я хочу это:

a b 
c d 

В основном, две колонки, а не один.

Что я делаю неправильно?

+2

Откуда берутся $ item и $ item2, потому что похоже, что у них уже есть возврат каретки. – menkes

+0

Вот в чем проблема. – Abs

ответ

3

ли вы читать эти значения из файла/потока с использованием fgets()? Затем завершающая строка является частью строки. Используйте trim(), чтобы удалить линию.

Вас, возможно, заинтересует функция fputcsv().

+0

Фантастический, аккуратный выполнил эту работу. Строка из веб-страницы, и я могу себе представить, что она имеет прерывание линии. Спасибо VolKerK. :) – Abs

3

Я действительно надеюсь, что вы не открываете и не закрываете файл на каждой итерации, так как это создает серьезную нагрузку на файловую систему. Вместо этого вы могли бы сделать что-то вроде этого:

$csv = array(); 
foreach($myData as $row) { 
    $csv[] = trim($row['item1']).','.trim($row['item2']); 
} 
file_put_contents('tech.csv', implode("\r\n", $csv), FILE_APPEND); 

Или, вы можете использовать функцию fputcsv:

$fp = fopen('tech.csv', 'a+'); 
foreach($myData as $row) { 
    fputcsv($fp, array(trim($row['item1']), trim($row['item2'])); 
}  
fclose($fp); 
+0

Образец кода в OP присоединяется к существующему файлу ('a +'), тогда как этот код перезаписывает все, что есть. – nickf

+0

@nickf, я подозреваю, это потому, что он делает открытие и закрытие на каждой итерации, если я правильно его понял, но я изменил свои примеры, чтобы они добавляли, чтобы избежать путаницы. –

+0

Я не открываю и не закрываю петлю! Я сказал, что поставил первую и вторую строчку вне цикла в моем вопросе. :) – Abs

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