搜索并替换文件中的现有数组元素 - PHP


Search And Replace Existing Array Element Within File - PHP

$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(我只能假设在同一脚本中包含和打开同一文件存在问题(。

提前感谢您的任何帮助。

您的代码可以大大简化,但有一些值得注意的设计更改。 首先,您存储的数组结构效率低下,并且首先否定了使用数组的好处。 数组的一个非常强大的功能是它们能够使用有意义的键(称为关联数组(存储数据。 在这种情况下,您的数组应如下所示:

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 文件读入内存! 因此,根据文件的实际大小,这可能会对服务器性能产生负面影响(尽管在服务器注意到之前可能需要几兆字节,即使这样也会对性能产生微不足道的影响(。