Подскажите как отредактировать ячейку или столбец в csv файле? средствами php Есть csv файл с 6 строк скажем id,найменование,цена,количество,сума PHP: 1,ложка,34,2,32 2,кружка,23,4,66 3,тарелка,45,6,352 4.вилка,21,3,235 скажем как перезаписать суму 34*2= PHP: $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>';
Можно так: PHP: <?php // парсим csv файл $data = array_map('str_getcsv', file('goods.csv')); $col_number = 3; # порядковый номер поля $row_number = 1; # порядковый номер записи // заменяем значение на 24 $data[$row_number-1][$col_number-1] = 24; // открываем файл $csv_file = fopen('goods.csv','w'); // $rows - это массив записей (с изменениями) foreach($data as $rows) { // форматируем массив в csv и записываем в файловый указатель fputcsv($csv_file, $rows); } // закрываем файл fclose($csv_file); // смотрим конечный результат уже из измененного файла echo '<pre>'; print_r(array_map('str_getcsv', file('goods.csv'))); echo '</pre>';
Спасибо интересный вариант, и почему в конец строки, кавычки пишет 1,ложка,24,2,"32 ",. типерь нужно разложить это в форму
Как вариант, код ниже. В массиве $array каждый подмассив - это заменяемая ячейка и ее новое значение. Т.е. 1 - это запись, 5 - это поле, "VALUE1" - это новое значение. PHP: <?php // парсим csv файл $data = array_map('str_getcsv', file('goods.csv')); $array = [ [1,5,"VALUE1"], [2,5,"VALUE2"] ]; for($i=0;$i<count($array);$i++) { $data[$array[$i][0]-1][$array[$i][1]-1] = $array[$i][2]; } $csv_file = fopen('goods.csv','w'); // $rows - это массив записей (с изменениями) foreach($data as $rows) { // форматируем массив в csv и записываем в файловый указатель fputcsv($csv_file, $rows); } // закрываем файл fclose($csv_file); // смотрим конечный результат уже из измененного файла echo '<pre>'; print_r(array_map('str_getcsv', file('goods.csv'))); echo '</pre>';
Спасибо буду эксперементировать, я пока учусь, пробую писать корзину на файлах, может csv это дурная затея но для 5 позиций думаю хватит и это только вот csv дописывает ", изначально записываю в файл , потом какбы пользователь с ип добавляет в корзину во временый файл , потом оформляем заказ пересчитываем и записывает в файл ну вот опять как записать тольную суму, посчитат то посчитает или может посоветуйте как лучше
Если вместо "NEW VALUE1" написать, например, сумму товара [1,5,200] , то никакие кавычки, по-крайней мере у меня, не добавляются. Записать также. Может быть вы про AJAX не знаете, поэтому так говорите. Я тоже учусь. Еще вчера я знал лишь, что CSV это формат какой-то, а сегодня я могу его парсить и манипулировать данными.
щото намудрил я целую кучу а до конечного результата дойти не могу , как типерь этот обработчик пост или джет написать или как из инпут перенести значение и записать, помогуте добить это PHP: <table border="1" width="500" align="center" cellpadding="5" cellspacing="5" valign="top"> <tr> <td></td> <td>Наименование</td> <td>Цена</td> <td>Количество</td> <td>Сумма</td> </tr> <form action="" method="POST"> <?php $cart = file("file.csv"); $total_sum = 0; $summa = 0; foreach($cart as $elem => $line) { if(!strripos($line, ",")) continue; $elem = explode(",",$line); $summa += $elem[2]; $total_sum += $elem[4]; echo '<tr> <td>'.$elem[0].'</td> <td>'.$elem[1].'</td> <td>'.$elem[2].'</td> <td><input type="text" name="price" size="5" value="'.$elem[3].'" /></td> <td>'.$elem[4].'<input type="hidden" name="total" size="5" value="'.$elem[2] * $elem[3].'" /></td> </tr>';} echo '<tr><td colspan="2" ></td><td>'.$summa.'</td><td></td><td>'.$total_sum.'</td></tr>'; echo '<tr><td colspan="4" ></td><td><input type="submit" value="Пересчитать" name="submit" /></td></tr>'; echo '</form></table>'; // парсим csv файл $data = array_map('str_getcsv', file('file.csv')); $array = array( array(1,4,"VALUE1"), array(1,5,"VALUE2") ); for($i=0;$i<count($array);$i++) { $data[$array[$i][0]-1][$array[$i][1]-1] = $array[$i][2]; } $csv_file = fopen('file.csv','w'); // $rows - это массив записей (с изменениями) foreach($data as $rows) { // форматируем массив в csv и записываем в файловый указатель fputcsv($csv_file, $rows); } // закрываем файл fclose($csv_file); ?>