У меня есть файл csv с некоторыми записями, и каждая запись имеет уникальный идентификатор. Я запускаю цикл, чтобы найти этот уникальный идентификатор, а затем добавить еще некоторые данные в эту запись.
Можно ли сделать это без временного файла? Создание такого файла и перемещение всех данных в нем занимает больше времени …
Мой код:
<?php $temp = fopen('tempwin.csv','w+'); if (($handle = fopen("win.csv", "r+")) !== FALSE) { while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { $num = count($data); $row++; for ($c=0; $c < $num; $c++) { if($data[4] == trim($leadid)){ $data[5] = trim($_POST['year']); $data[6] = trim($_POST['make']); $data[7] = trim($_POST['model']); $data[8] = trim($_POST['trade']); } } fputcsv($temp, $data); } fclose($handle); fclose($temp); } unlink('win.csv'); rename('tempwin.csv','win.csv');
Вы можете использовать следующее, но вам нужно передать номер строки, то есть там, где вам нужно добавить строку.
<?php //A helping function to insert data at any position in array. function array_insert($array, $pos, $val) { $array2 = array_splice($array, $pos); $array[] = $val; $array = array_merge($array, $array2); return $array; } //What and where you want to insert $DataToInsert = '11,Shamit,Male'; $PositionToInsert = 3; //Full path & Name of the CSV File $FileName = 'data.csv'; //Read the file and get is as a array of lines. $arrLines = file($FileName); //Insert data into this array. $Result = array_insert($arrLines, $PositionToInsert, $DataToInsert); //Convert result array to string. $ResultStr = implode("\n", $Result); //Write to the file. file_put_contents($FileName, $ResultStr); ?>
Извлеките данные из исходного файла в виде массива или строки, внесите изменения и затем просто перезапишите содержимое файла с вашими измененными данными.