Как отредактировать ячейку или столбец в csv файле?

Подскажите как отредактировать ячейку или столбец в csv файле? средствами php

Есть csv файл с 6 строк скажем

id,найменование,цена,количество,сума

1,ложка,34,2,32 
2,кружка,23,4,66
3,тарелка,45,6,352 
4.вилка,21,3,235

скажем как перезаписать суму 34*2=

$cart = file("data/file.csv");

  $total_sum = 0;
$summa = 0;
foreach($cart as $elem => $line)
{
    if(!strripos($line, ",")) continue;
    $elem = explode(",",$line);
    $summa += $elem[2];

  echo '<tr>
   <td>'.$elem[1].'</td>
   <td>'.$elem[2].'</td>
   <td>'.$elem[3].'</td>
   <td>'.$elem[2] * $elem[3].'</td>
   <td>'.$elem[4].'</td>
   </tr>';
}

   echo '<tr><td colspan="3" >'.$summa.'</td>
   <td>'.$total_sum.'</td><td></td></tr>';
  • Вопрос задан
  • 580 просмотров
Пригласить эксперта
Ответы на вопрос 2
Taraflex
@Taraflex
Ищу работу. Контакты в профиле.
Если нужно редактировать весь столбец, а не отдельные ячейки по конкретным адресам, то стоит взять opensource.box.com/spout
заточенный под потоковую обработку через итераторы (жрет ресурсов существенно меньше PHPExcel/PhpSpreadsheet)
Ответ написан
Комментировать
boykopetro
@boykopetro Автор вопроса
шото я нарыл

// парсим csv файл
$data = array_map('str_getcsv', file('data/file.csv'));
 
$col_number = 5; # порядковый номер поля
$row_number = 1; # порядковый номер записи
 
// заменяем значение на 24
$data[$row_number-1][$col_number-1] = $sum += 3 * 6;
 
// открываем файл
$csv_file = fopen('data/file.csv','w');
 
// $rows - это массив записей (с изменениями)
foreach($data as $rows) {
    // форматируем массив в csv и записываем в файловый указатель
    fputcsv($csv_file, $rows);
}
// закрываем файл
fclose($csv_file);
 
// смотрим конечный результат уже из измененного файла
echo '<pre>';
print_r(array_map('str_getcsv', file('data/file.csv')));
echo '</pre>';


// Искомое значение
$need = 'вилка';
// Строка для замены
$repl = 'Большая вилка';
// Путь к csv-файлу
$csv_file = 'data/file.csv';

// Новый массив с данными для записи в csv-файл
$csv_new = array();

// Если файл доступен для чтения
if (($fp = fopen($csv_file, 'r')) !== false) {
    // Читать построчно, сохраняя каждую его строку во временный массив
    while (($arr = fgetcsv($fp, 1000, ',')) !== false) {
        // Если найдено искомое значение
        if (($k = array_search($need, $arr)) !== false) {
            // Перезаписать ячейку массива
            $arr[$k] = $repl;
        }
        // Сохранить временный массив в новый двумерный массив
        $csv_new[] = $arr;
    }
    fclose($fp);
}

// Если файл доступен для записи
if (($fp = fopen($csv_file, 'w')) !== false) {
    // Проходим по массиву
    foreach ($csv_new as $fields) {
        // И пишем данные в csv-файл
        fputcsv($fp, $fields);
    }
    fclose($fp);
}


как это все разложить в форму и редактировать два столбца и вопше это какято неправильная затея как типерь записать всю суму
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы