直接贴方法吧:
首先例如修改下图配置
已知值$val=array(1,2,3);
需要修改上图的值limitonegoods为$val
$val=json_encode($val,JSON_UNESCAPED_UNICODE);
Env::offsetSet('USERGOODS.LIMITONEGOODS',$val);
$envPath = root_path() . DIRECTORY_SEPARATOR . '.env';
// $envinidata=ksort(Env::get());
$envinidata=Env::get();
$envinidata=$this->arr_to_iniarr($envinidata);
$inicontent=$this->arr_trinsform_ini($envinidata);
$fp = fopen($envPath, "w") or die("Couldn't open $envPath");
fputs($fp,$inicontent);
fclose($fp);
下面写入方法
/**
* author:leishaofa
* date:20191225
* effect:ini数组分割处理
*/
function arr_to_iniarr(array $a, array $parent = array())
{
$out = [];
foreach ($a as $k => $v){
$key=explode('_',$k);
if(count($key)>1 && !in_array($key[0],$out)){
$out[]=$key[0];
unset($key);
}
}
return $out;
}
/**
* author:leishaofa
* date:20191225
* effect:ini数据组装
*/
function arr_trinsform_ini(array $a, array $parent = array()){
$out = ''.PHP_EOL;
foreach ($a as $k => $v) {
if (is_array($v)) {
$sec = array_merge((array) $parent, (array) $k);
$out .= '[' . join('.', $sec) . ']' . PHP_EOL;
$out .= arr_trinsform_ini($v, $sec);
}
else {
if(empty($v)){
$out .=PHP_EOL.PHP_EOL;
$out .=$k.PHP_EOL;
}else{$out .= "$k = $v" . PHP_EOL;}
}
}
return $out;
}
上面有没有错误有没有,是有的怎么优化呢
优化后
$val=json_encode($val,JSON_UNESCAPED_UNICODE);
Env::offsetSet('USERGOODS.LIMITONEGOODS',$val);
$envPath = root_path() . DIRECTORY_SEPARATOR . '.env';
// $envinidata=ksort(Env::get());
$envinidata=Env::get();
$inicontent=self::arr_trinsform_ini($envinidata);
print_r(Env::get());
print_r($inicontent);
$fp = fopen($envPath, "w") or die("Couldn't open $envPath");
fputs($fp,$inicontent);
fclose($fp);
/**
* author:leishaofa
* date:20191225
* effect:ini数据组装
*/
function arr_trinsform_ini(array $a, array $parent = array()){
$out = ''.PHP_EOL;
$keysindent=[];
foreach ($a as $k => $v) {
if (is_array($v)) {
$sec = array_merge((array) $parent, (array) $k);
$out .= '[' . join('.', $sec) . ']' . PHP_EOL;
$out .= arr_trinsform_ini($v, $sec);
}
else {
$key=explode('_',$k);
if(count($key)>1 && !in_array($key[0],$keysindent)){
$keysindent[]=$key[0];
$out .=PHP_EOL.PHP_EOL;
$out .="[$key[0]]".PHP_EOL;
unset($key[0]);
$out .= implode('_',$key)." = $v" . PHP_EOL;
//unset($key);
}elseif (count($key)>1 && in_array($key[0],$keysindent)){
unset($key[0]);
$out .= implode('_',$key)." = $v" . PHP_EOL;
}else{
$out .= "$k = $v" . PHP_EOL;
}
}
}
return $out;
}
同时建议在里面加一个版本,修改通过获取版本号来判断文件是否存在,这个代码我就不贴出来了
至于上面$envinidata=ksort(Env::get());用不用那我觉得看里面配置,如果在顶上面加了没分组的标识建议不要使用排序例如下图
上面多个了timelimitpage = 1没有分组就不能使用排序
重要函数:parse_ini_file
还有可能有些人喜欢配置存session里面,看喜好,但是我还是赞同存配置里面