直接贴方法吧:
首先例如修改下图配置
已知值$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里面,看喜好,但是我还是赞同存配置里面