如何在特定位置将文本插入文件?
问题描述:
我的文件看起来像这样。我需要通过file_put_contents
追加一些新的数组键。如何在特定位置将文本插入文件?
<?php
$translation = array(
'Wyposażenie' => 'Equipment',
);
?>
我不知道该怎么做。我唯一知道的是我必须使用file_put_contents($file, "'test' => 'new value',", FILE_APPEND | LOCK_EX);
,但它会在文件末尾添加新信息。如何在最后一个数组键之后追加我的新信息。要得到的东西是:
<?php
$translation = array(
'Wyposażenie' => 'Equipment',
'test' => 'new value',
);
?>
答
我写这是我的自我。这里是我的代码:
public static function l($string)
{
$string = trim(preg_replace('/\s+/', ' ', $string));
if($_SESSION['lang']=='default')
{
return $string;
}
else
{
$file = 'translations/'.$_SESSION['lang'].'.php';
if (file_exists($file))
{
require($file);
$search = array_key_exists($string, $translation);
if($search && $translation[$string] != ' ')
{
# ZNALAZŁ TŁUMACZENIE
return $translation[$string];
}
else
{
if(!$search)
{
# NIE ZNALAZŁ TŁUMACZENIA
$translation[$string] = ' ';
$serialized = "<?php\n\$translation = array(\n\n\n";
while ($array = current($translation)) {
if(key($translation))
{
$serialized .= "'".key($translation)."'\n=>\n'".current($translation)."',\n\n\n";
}
next($translation);
}
$serialized .= ");\n?>";
file_put_contents($file, $serialized);
}
if($translation[$string] == ' ')
{
# ZNALAZŁ PUSTE TŁUMACZENIE
}
return $string;
}
}
else
{
return $string;
}
}
}
答
正如在评论中提到别人,这可以更好的方式,但只是针对这种情况在这里使用JSON是你如何能做到这一点做到:
<?php
$read = file_get_contents("i.txt");
$delete = strrpos($read,");",-1);
$read = substr($read,0,$delete);
$new_value = "'test' => 'new value',";
$read .= "\r\n\$new_value \r\n);\r\n ?>";
file_put_contents('i.txt',$read);
?>
答
我很无聊。这不会覆盖存在的键。要覆盖,扭转阵列中array_merge()
:
function add_to_trans($file, $array) {
include($file);
$result = array_merge($translation, $array);
file_put_contents($file, '$translation = ' . var_export($result, true));
}
$new_trans = array('test' => 'new value');
add_to_trans('path/to/file.php', $new_trans);
但你应该重新考虑这一点,将文件保存在一个json_encode()
阵列并重新读取出来。
这不是一个数组。这是*文字*。将内容添加到数组很容易。把它放在随机文本中不是。 – 2015-03-31 20:45:11
另外,也许使用'json_encode'。但除此之外,修改数组和'var_export'。 – AbraCadaver 2015-03-31 20:48:28
_ @约翰孔德_你想告诉我,这是不可能的? :)那么把它放到一个字符串中,删除:'); ?>',然后将数据附加到字符串,然后再次添加'); ?>'最后保存? – 2015-03-31 20:53:43