#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), большое вам спасибо за вашу помощь, и я буду работать с этим, пока, надеюсь, не смогу заставить его работать.