$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只能假设在同一个脚本中包含和打开同一个文件存在问题。
提前感谢您的帮助。
答案 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文件读入内存!因此,根据文件的实际大小,这可能会对服务器性能产生负面影响(尽管在服务器发现之前它可能需要几兆字节,甚至可能对性能产生微不足道的影响)。