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

时间:2014-06-28 17:58:03

标签: php arrays include 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(I只能假设在同一个脚本中包含和打开同一个文件存在问题。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

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

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