Прошу помочь с идеей реализации изменения данных в csv файлах.
Есть форма для поиска значения в многомерном массиве
<form method=post name=form4>
<table><tbody><tr>
<td><input type=text name=fieldid /></td>
<td><input type=submit name=form4 /></td>
</tr></table></tbody></form>
Сам поиск данных и возврат их в новую форму для дальнейшей правки
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['form4'])) {
$needle = $_POST['fieldid'];
$result = array_filter($get_csv, function($innerArray){
global $needle;
return ($innerArray[0] == $needle);});
$get_csv // У меня многомерный массив из csv файла
echo "<form method=post name=form5><table><tbody><tr>";
foreach ($result as $val) {
echo "<td><input type=text name=field0 value=\"" . $val[0] . "\"/></td>";
echo "<td><input type=text name=field1 value=\"" . $val[1] . "\"/></td>";
echo "<td><input type=text name=field2 value=\"" . $val[2] . "\"/></td>";
echo "<td><input type=text name=field3 value=\"" . $val[3] . "\"/></td>";}
echo " <td><input type=submit name=form5/></td>";
echo "</tr></table></tbody></form>";
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['form5'])) {
$field0 = $_POST['field0'];$field1 = $_POST['field1'];$field2 = $_POST['field2'];$field3 = $_POST['field3'];
$f=fopen("old.csv","r");
$r=fopen("new.csv","w");
while (!feof($f)) {
$s=fgets($f);
$a=explode(";",$s);
if ($a[0]==$field0) $a[1]=$field1;
fputs($r,implode(";",$a);
}
fclose($f);
fclose($r);
});
}
Сама замена у меня осуществляется с помощью перезаписи файла, да и не текущего, а другого. Сейчас читаю по справочнику, что с помощью array_replace возможно поменять значение в массиве, но как потом заменить в файле только необходимую строчку без перезаписи? Насколько я знаю средствами php возможно добавлять данные лишь в конец csv файла.