Поиск и замена существующего элемента массива в файле — PHP

#php #arrays #include #fwrite

#php #массивы #включить #fwrite

Вопрос:

 $static = ');';
$file = 'onebigarray.php';
$fh = fopen($file, 'r ');
include $file;
if (in_array($keyname, $udatarray)) {
    $key = array_search($keyname, $udatarray);
    $fsearch = $key   4;
    fseek($fh, $fsearch, SEEK_END);
    fwrite($fh, 'new data');
    fseek($fh, - 2, SEEK_END);
    fwrite($fh, $static);
    fclose($fh);
}
  

Я новичок в PHP.
Что я сделал, так это создал форму, которая записывает элементы массива в файл «onebigarray.php «.
Файл выглядит следующим образом

 Array (
'name',
'data',
'name2',
'data2',
);
  

Что мне в конечном итоге нужно сделать, это загрузить это $file , выполнить поиск в массиве существующего имени, а затем заменить ‘data (2)’ на то, что было введено в форму. Весь скрипт чрезвычайно большой и состоит из 3 разных файлов, он работает, но теперь мне нужно найти способ поиска и замены элементов массива в существующем файле, а затем записать их в этот файл. В этом разделе скрипта это то, где это должно произойти, и это та часть, которая доставляет мне больше всего проблем, в настоящее время он, похоже, правильно загружает и выполняет if/else инструкцию, однако полностью игнорирует fwrite (я могу только предположить, что есть проблема с включением и открытием одного и того же файла в одном и том же файле).скрипт).

Заранее благодарим вас за любую помощь.

Комментарии:

1. Я бы сохранил массив в файле в формате JSON. Затем вы можете просто загрузить его, обработать и записать обратно.

2. проблема в том, что я пытаюсь сделать как можно больше, исходя из ограниченных знаний, я не очень хорошо знаком с JSON, но я очень благодарен вам за предложение и, вероятно, буду изучать JSON в какой-то момент здесь в ближайшем будущем.

Ответ №1:

Ваш код может быть значительно упрощен, но с некоторыми заметными изменениями дизайна. Во-первых, ваша сохраненная структура массива неэффективна и сводит на нет преимущества использования массива в первую очередь. Очень мощной особенностью массивов является их способность хранить данные с осмысленным ключом (известным как ассоциативный массив). В этом случае ваш массив должен выглядеть следующим образом:

 array(
    'name' => 'data',
    'name2' => 'data2'
);
  

Это позволяет вам извлекать данные непосредственно по имени ключа, например $data = $array['name2'] .

Во-вторых, изменение данных, хранящихся в ‘onebigarray.php «переход от PHP-кода к JSON делает взаимодействие с любой другой системой тривиальным и упрощает последующее расширение.

Предполагая, что файл переименован в ‘onebigarray.json’ и его содержимое выглядит следующим образом (после использования json_encode() в приведенном выше массиве):

 {"name":"data","name2":"data2"}
  

Тогда приведенный ниже код будет работать хорошо:

 <?php
$file = 'onebigarray.json';
$key = 'name2';
$new_data = 'CHANGED';

$a = (array) json_decode(file_get_contents($file));

if (array_key_exists($key, $a)) {
    $a[$key] = $new_data;

    file_put_contents($file, json_encode($a));
}
?>
  

После выполнения вышеуказанного, файл JSON теперь будет содержать это:

 {"name":"data","name2":"CHANGED"}
  

Большое предостережение: это приведет к считыванию всего файла JSON в память! Таким образом, в зависимости от того, насколько велик файл на самом деле, это может негативно повлиять на производительность сервера (хотя, вероятно, должно быть несколько мегабайт, прежде чем сервер даже заметит, и даже тогда с тривиальным влиянием на производительность).

Комментарии:

1. учитывая количество деталей, которые вы предоставили здесь, я считаю, что это возможно для меня реализовать (даже учитывая мой недостаток знаний в JSON), большое вам спасибо за вашу помощь, и я буду работать с этим, пока, надеюсь, не смогу заставить его работать.