walkor老大,插件化開發(fā),會比較多的進行配置文件的修改,如題能否寫一個統(tǒng)一的方法,方便調(diào)用對配置文件進行操作。
$key = 'Asia/Beijing';
file_put_contents(base_path()."/config/app.php", str_replace(
"'default_timezone' => '".config('app.default_timezone')."'",
"'default_timezone' => '".$key."'",
file_get_contents(base_path()."/config/app.php")
));
deit和del傳入數(shù)組,支持多維,edit鍵值對,del傳入需要刪除的key=>val值
namespace Taoser\SetConfig;
class SetArr
{
/**
* 數(shù)組字符串
*
* @var string
*/
protected string $str = '';
function __construct(string $configName)
{
// 配置文件名稱
$this->configName = $configName;
// 文件路徑
$this->configFile = str_replace('\\', '/', config_path() . '/' . $configName. '.php');
//加載配置文件
$this->str = $str = file_get_contents($this->configFile);
}
/**
* 編輯配置數(shù)組表
* 一位數(shù)組修改請用delete和add組合
* 僅支持鍵值對的數(shù)組修改
*
* @param array $arr
* @return boolean
*/
public function edit($arr) :bool
{
// 只能修改有鍵值對的數(shù)組
if(!is_array($arr)) return false;
foreach($arr as $k => $v) {
// key不存在
if(!array_key_exists($k,config($this->configName))) {
echo $k.'不存在 ';
return false;
}
// 一級數(shù)組修改
if(!is_array($v)) {
$pats ='/return\s*\[[^\[|\]]*,\r?\n/';
preg_match($pats,$this->str,$arr);
//halt($arr);
if(is_string($v)){
// 字符串
if(stripos($v,'::class') == false && stripos($v,'()') == false && stripos($v,'//') === false) {
$repk = "'". $k . "' => '" . $v . "',";
} else {
$repk = "'". $k . "' => " . $v . ",";
}
} elseif(is_bool($v)) {
//布爾
$repk = ($v == true) ? "'" . $k . "' => true," : "'" . $k . "' => false,";
} else {
// 數(shù)字
$repk = "'". $k . "' => " . $v .",";
}
$patk = '/\'' . $k . '\'(.*),/';
$reps = preg_replace($patk, $repk, $arr[0]);
// 正則查找然后替換
$this->str = preg_replace($pats, $reps, $this->str);
} else {
// 正則二級配置
$pats = '/\'' . $k . '\'\s*=>\s*\[[^\[|\]]*,/';
// 二級和三級
foreach($v as $kk => $vv) {
if(!array_key_exists($kk, config($this->configName.'.'.$k))) {
echo $kk.'不存在';
return false;
}
//二級配置
if(!is_array($vv)) {
if(is_string($vv)){
// 字符串
if(stripos($vv,'::class') == false && stripos($vv,'()') == false && stripos($vv,'//') === false) {
$repkk = "'". $kk . "' => '" . $vv . "',";
} else {
$repkk = "'". $kk . "' => " . $vv . ",";
}
} elseif(is_bool($vv)) {
//布爾
$repkk = ($vv == true) ? "'" . $kk . "' => true," : "'" . $kk . "' => false,";
} else {
// 數(shù)字
$repkk = "'". $kk . "' => " . $vv .",";
}
preg_match($pats,$this->str,$arrk);
// 正則需要替換的部分
$patkk = '/\'' . $kk . '\'(.*?),/';
$reps = preg_replace($patkk, $repkk, $arrk[0]);
$this->str = preg_replace($pats, $reps, $this->str);
} else {
// 三級配置
// 正則二級下的三級配置
//$pats = '/\'' . $kkk . '\'[\s\S]*?(?:'.$kkk.')\'(.*),/';
$pats = '/\'' . $kk . '\'\s*=>\s*\[[^\[|\]]*,/';
foreach($vv as $kkk => $vvv) {
if(!array_key_exists($kkk, config($this->configName.'.'.$k.'.'.$kk))) {
echo $kkk.'不存在';
return false;
}
if(!is_array($vvv)) {
// 類型判斷
if(is_string($vvv)) {
if(stripos($vvv,'::class') == false && stripos($vvv,'()') == false && stripos($vvv,'//') === false) {
$arrReps = "'" . $kkk . "' => '" . $vvv . "',";
} else {
$arrReps = "'" . $kkk . "' => " . $vvv . ",";
}
} elseif(is_bool($vvv)) {
//布爾
$arrReps = ($vvv == true) ? "'" . $kkk . "' => true," : "'" . $kkk . "' => false,";
} else {
$arrReps = "'" . $kkk . "' => " . $vvv . ",";
}
preg_match($pats,$this->str,$arrkk);
// 正則需要替換的部分
$arrPats = '/\'' . $kkk . '\'(.*),/';
$reps = preg_replace($arrPats, $arrReps, $arrkk[0]);
$this->str = preg_replace($pats, $reps, $this->str);
} else {
// 四級配置
// 正則$kkk
//$pats = '/\'' . $kk . '\'[\s\S]*?(?:'.$kkk.')\'[\s\S]*?(?:'.$kkkk.')\'(.*),/';
$pats = '/\'' . $kkk . '\'\s*=>\s*\[[^\[|\]]*,/';
foreach($vvv as $kkkk => $vvvv) {
if(!array_key_exists($kkkk, config($this->configName.'.'.$k.'.'.$kk.'.'.$kkk))){
echo $kkk.'不存在';
return false;
}
// 類型判斷
if(is_string($vvvv)) {
if(stripos($vvvv,'::class') == false && stripos($vvvv,'()') == false) {
$repskkkk = "'" . $kkkk . "' => '" . $vvvv . "',";
} else {
$repskkkk = "'" . $kkkk . "' => " . $vvvv . ",";
}
} elseif(is_bool($vvvv)) {
//布爾
$repskkkk = ($vvvv == true) ? "'" . $kkkk . "' => true," : "'" . $kkkk . "' => false,";
} else {
$repskkkk = "'" . $kkkk . "' => " . $vvvv . ",";
}
preg_match($pats,$this->str,$arrkkk);
$patskkkk = '/\'' . $kkkk . '\'(.*),/';
$reps = preg_replace($patskkkk, $repskkkk, $arrkkk[0]);
$this->str = preg_replace($pats, $reps, $this->str);
}
}
}
}
}
}
}
//寫入配置
return file_put_contents($this->configFile, $this->str) ? true : false;
}
/**
* 刪除配置數(shù)組表
* 不支持一次性刪除整個數(shù)組
* 子元素被刪除會清理空數(shù)組
*
* @param array $arr
* @return boolean
*/
public function delete($arr) :bool
{
// 只能修改有鍵值對的數(shù)組
if(!is_array($arr)) return false;
foreach($arr as $k => $v) {
// 一級數(shù)組修改
if(!is_array($v)) {
// 正則開頭到,不包含子數(shù)組
$pats ='/return\s*\[[^\[|\]]*,\r?\n/';
preg_match($pats,$this->str,$arr);
if(!isset($arr[0])) {
echo '有誤,刪除項可能并不存在';
return false;
}
if(is_int($k)) {
// 一維數(shù)組正則
$patk = $this->getPats($v);
} else {
// key不存在
if(!array_key_exists($k,config($this->configName))) {
echo $k.'不存在 ';
return false;
}
$patk = '/[^\n]*\'' . $v . '\'(.*?)\r?\n/';
}
// 正則查找然后替換
$reps = preg_replace($patk, '', $arr[0]);
$this->str = preg_replace($pats, $reps, $this->str);
} else {
// 二級和三級
foreach($v as $kk => $vv) {
//二級配置
if(!is_array($vv)) {
// 正則二級配置
$pats = '/\'' . $k . '\'\s*=>\s*\[[^\[|\]]*,\r?\n/';
preg_match($pats,$this->str,$arrk);
if(!isset($arrk[0])) {
echo $k.'有誤,可能并不存在';
return false;
}
if(is_int($kk)) {
$patkk = $this->getPats($vv);
} else {
// key不存在
if(!array_key_exists($kk,config($this->configName.'.'.$k))) {
echo $kk.'不存在 ';
return false;
}
// 正則需要替換的部分
$patkk = '/[^\n]*\'' . $kk . '\'(.*?),\r?\n/';
}
$reps = preg_replace($patkk, '', $arrk[0]);
$this->str = preg_replace($pats, $reps, $this->str);
} else {
// 三級配置
foreach($vv as $kkk => $vvv) {
if(!is_array($vvv)) {
// 正則二級下的三級配置
$pats = '/\'' . $kk . '\'\s*=>\s*\[[^\[|\]]*,\r?\n/';
preg_match($pats,$this->str,$arrkk);
if(!isset($arrkkk[0])) {
echo $kk.'有誤,可能并不存在';
return false;
}
if(is_int($kkk)) {
$patkkk = $this->getPats($vvv);
} else {
if(!array_key_exists($kkk, config($this->configName.'.'.$k.'.'.$kk))) {
echo $kkk.'不存在';
return false;
}
$patkkk = '/[^\n]*\'' . $kkk . '\'(.*),\r?\n/';
}
// 正則需要替換的部分
$reps = preg_replace($patkkk, '', $arrkk[0]);
$this->str = preg_replace($pats, $reps, $this->str);
} else {
// 四級配置
foreach($vvv as $kkkk => $vvvv) {
if(!is_array($vvvv)) {
// 正則$kkk
$pats = '/\'' . $kkk . '\'\s*=>\s*\[[^\[|\]]*,\r?\n/';
preg_match($pats,$this->str,$arrkkk);
if(!isset($arrkkk[0])) {
echo $kkk.'有誤,可能并不存在';
return false;
}
if(is_int($kkkk)) {
$patskkkk = $this->getPats($vvvv);
} else {
if(!array_key_exists($kkkk, config($this->configName.'.'.$k.'.'.$kk.'.'.$kkk))){
echo $kkkk.'不存在';
return false;
}
$patskkkk = '/[^\n]*\'' . $kkkk . '\'(.*),\r?\n/';
}
$reps = preg_replace($patskkkk, '', $arrkkk[0]);
$this->str = preg_replace($pats, $reps, $this->str);
} else {
echo '不支持更多的層級數(shù)組';
}
}
}
}
}
}
}
/* 匹配空數(shù)組
* 'key' => [
* ],
*/
$nullArray = '/[^\n]*\'\w+\'\s*=>\s*\[\s*\]{1}\S*\,?\r?\n/m';
//preg_match($nullArray,$this->str,$arr);
$this->str = preg_replace($nullArray, '', $this->str);
}
//寫入配置
return file_put_contents($this->configFile, $this->str) ? true : false;
}
/**
* 獲取數(shù)組中子元素為數(shù)組的個數(shù)
*
* @param [type] $arr
* @return integer
*/
public function getArrSonNum($arr) :int
{
$i = 0;
foreach ($arr as $val) {
if(is_array($val)){
$i++;
foreach($val as $vv){
if(is_array($vv)){
$i++;
$this->getArrSonNum($vv);
}
}
}
}
return $i;
}
/**
* 獲取一維數(shù)組在正則公式
*
* @param [type] $v
* @return string
*/
public function getPats($v) :string
{
if(is_bool($v)){
//布爾
$pats = $v ? '/[^\n]*true,\r?\n/' : '/[^\n]*false,\r?\n/';
} else {
// 字符串包含\
if(stripos($v,"\\") !== false) {
$v = str_replace("\\", "\\\\", $v);
}
// 字符串包含/
if(stripos($v,'/') !== false) {
$v = str_replace('/', '\/', $v);
}
if(stripos($v,'(') !== false) {
$v = str_replace('(', "\(", $v);
}
if(stripos($v,')') !== false) {
$v = str_replace(')', "\)", $v);
}
// if(stripos($v,":") !== false) {
// $v = str_replace(":", "\:", $v);
// }
// dump($v);
// if(stripos($v,'.') !== false) {
// $v = str_replace('.', '\.', $v);
// }
// dump($v);
// if(stripos($v,"'") !== false) {
// $v = str_replace('\'', "\'", $v);
// }
// dump($v);
// if(stripos($v,'-') !== false) {
// $v = str_replace('-', "\-", $v);
// }
// dump($v);
// if(stripos($v,'>') !== false) {
// $v = str_replace('>', "\>", $v);
// }
// dump($v);
$pats = '/[^\n]*' . $v . '(.*?)\r?\n/';
}
return $pats;
}
/**
* 獲取數(shù)組內(nèi)數(shù)值數(shù)組的個數(shù)
* 排除數(shù)組中元素為數(shù)組的元素
*
* @param array $array
* @return boolean
*/
public function getArrSonCount(array $array) :bool
{
// 數(shù)組元素數(shù)量
$count = count($array);
// 子數(shù)組個數(shù)
$i = 0;
foreach ($array as $val) {
if(is_array($val)) {
$i++;
}
}
// 數(shù)值數(shù)組的數(shù)量
$count = $count - $i;
if($count > 0) {
return true;
} else {
return false;
}
}
基于正則的配置項添加,支持添加三級數(shù)組。
/**
* 新增配置項,支持三級數(shù)組配置
*
* @param array $arr
* @return boolean
*/
public function add(array $arr) :bool
{
//正則];數(shù)組結(jié)尾
$end = '/\];/';
//一級配置,內(nèi)容追加到return [一級配置,之后
$start = $this->getArrSonCount(config($this->configName)) ? '/return\s*\[[^\[|\]]*,\r?\n/' : '/return\s*\[\r?\n?/';
if(is_array($arr)) {
foreach ($arr as $k => $v)
{
if(!is_array($v)) {
preg_match($start,$this->str,$arrstart);
if(is_int($k)) {
// 數(shù)值數(shù)組
if(is_string($v)){
// 類、函數(shù)、注釋,原樣寫入
if(stripos($v,'::class') == false && stripos($v,'()') == false && stripos($v,'//') === false) {
$reps = $arrstart[0]. "\t'". $v ."',\n";
} else {
$reps = $arrstart[0]. "\t". $v .",\n";
}
} elseif(is_bool($v)) {
$reps = ($v == true) ? $arrstart[0]."\ttrue,\n" : $arrstart[0]."\tfalse,\n";
} else {
$reps = $arrstart[0]."\t".$v . ",\n";
}
} else {
// 鍵值關(guān)聯(lián)數(shù)組
//判斷是否存在KEY
if (array_key_exists($k,config($this->configName))) {
echo $k.'不能添加已存在的配置項';
return false;
}
if(is_string($v)){
if(stripos($v,'::class') == false && stripos($v,'()') == false && stripos($v,'//') === false) {
$reps = $arrstart[0]."\t'" . $k . "' => '" . $v ."',\n";
} else {
$reps = $arrstart[0]."\t'" . $k . "' => " . $v .",\n";
}
} elseif(is_bool($v)) {
$reps = ($v == true) ? $arrstart[0]."\t'" . $k . "' => true,\n" : $arrstart[0]."\t'" . $k . "' => false,\n";
} else {
$reps = $arrstart[0]."\t'" . $k . "' => " . $v .",\n";
}
}
$this->str = preg_replace($start, $reps, $this->str);
} else {
// $v是數(shù)組,存在多級配置
// $k不存在,新增二級配置數(shù)組, 數(shù)組插入];之前
if (!array_key_exists($k,config($this->configName))) {
// 拼接數(shù)組內(nèi)元素
$sonArr = '';
foreach($v as $kk => $vv) {
// 1.$vv不是數(shù)組,新增配置只有二級元素
if(!is_array($vv)) {
if(!is_int($kk)) {
// 鍵值對數(shù)組
if(is_int($vv)) {
$sonArr .= "\t\t'". $kk. "' => " . $vv . ",\n";
} elseif(is_bool($vv)) {
//布爾
$sonArr .= ($vv == true) ? "\t\t'" . $kk . "' => true,\n" : "\t\t'" . $kk . "' => false,\n";
} else {
if(stripos($vv,'::class') == false && stripos($vv,'()') == false && stripos($vv,'//') === false) {
$sonArr .= "\t\t'". $kk. "' => '" . $vv . "',\n";
} else {
$sonArr .= "\t\t'". $kk. "' => " . $vv . ",\n";
}
}
} else {
// 數(shù)值數(shù)組
if(is_string($vv)) {
if(stripos($vv,'::class') == false && stripos($vv,'()') == false && stripos($vv,'//') === false) {
$sonArr .= "\t\t'" . $vv . "',\n";
} else {
$sonArr .= "\t\t" . $vv . ",\n";
}
} elseif(is_bool($vv)) {
//布爾
$sonArr .= ($vv == true) ? "\t\ttrue,\n" :"\t\tfalse,\n";
} else {
$sonArr .= "\t\t" . $vv . ",\n";
}
}
} else {
// 2.$vv是數(shù)組,新增中包含三級、四級子數(shù)組
$sonArrson = '';
foreach($vv as $kkk => $vvv) {
// $vvv不是數(shù)組,三級非數(shù)組
if(!is_array($vvv)){
if(!is_int($kkk)) {
if(is_string($vvv)) {
if(stripos($vvv,'::class') == false && stripos($vvv,'()') == false && stripos($vvv,'//') === false) {
$sonArrson .= "\t\t\t'". $kkk. "' => '" . $vvv . "',\n";
} else {
$sonArrson .= "\t\t\t'". $kkk. "' => " . $vvv . ",\n";
}
} elseif(is_bool($vvv)) {
$sonArrson .= ($vvv == true) ? "\t\t\t'". $kkk. "' => true,\n" : "\t\t\t'". $kkk. "' =>false,\n";
} else {
$sonArrson .= "\t\t\t'". $kkk. "' => " . $vvv . ",\n";
}
} else {
if(is_string($vvv)) {
if(stripos($vvv,'::class') == false && stripos($vvv,'()') == false && stripos($vvv,'//') === false) {
$sonArrson .= "\t\t\t'" . $vvv . "',\n";
} else {
$sonArrson .= "\t\t\t" . $vvv . ",\n";
}
} elseif(is_bool($vvv)) {
$sonArrson .= ($vvv == true) ? "\t\t\ttrue,\n" : "\t\t\tfalse,\n";
} else {
$sonArrson .= "\t\t\t" . $vvv . ",\n";
}
}
} else {
//$vvv是數(shù)組,但不支持子數(shù)組
$sonArrsonArr = '';
foreach($vvv as $kkkk =>$vvvv) {
if(is_array($vvvv)) {
echo $kkkk."不支持四級數(shù)組\n";
return false;
}
if(!is_int($kkkk)) {
if(is_string($vvvv)) {
if(stripos($vvvv,'::class') == false && stripos($vvvv,'()') == false && stripos($vvvv,'//') === false) {
$sonArrsonArr .= "\t\t\t\t'". $kkkk. "' => '" . $vvvv . "',\n";
} else {
$sonArrsonArr .= "\t\t\t\t'". $kkkk. "' => " . $vvvv . ",\n";
}
} elseif(is_bool($vvvv)) {
$sonArrsonArr .= ($vvvv == true) ? "\t\t\t\t'". $kkkk . "' => true,\n" : "\t\t\t\t'". $kkkk. "' =>false,\n";
} else {
$sonArrsonArr .= "\t\t\t\t'". $kkkk . "' => " . $vvvv . ",\n";
}
} else {
if(is_string($vvvv)) {
if(stripos($vvvv,'::class') == false && stripos($vvvv,'()') == false && stripos($vvvv,'//') === false) {
$sonArrsonArr .= "\t\t\t\t'" . $vvvv . "',\n";
} else {
$sonArrsonArr .= "\t\t\t\t" . $vvvv . ",\n";
}
} elseif(is_bool($vvvv)) {
$sonArrsonArr .= ($vvvv == true) ? "\t\t\t\ttrue,\n" : "\t\t\t\tfalse,\n";
} else {
$sonArrsonArr .= "\t\t\t\t" . $vvvv . ",\n";
}
}
}
$sonArrson .= "\t\t\t'". $kkk. "' => [\n".$sonArrsonArr."\t\t\t],\n";
//echo "不支持".$kkkk."是數(shù)組";
}
}
$sonArr .= "\t\t'". $kk. "' => [\n".$sonArrson."\t\t],\n";
}
}
$reps = "\t'". $k. "' => [\n".$sonArr."\t],\n];";
$this->str = preg_replace($end, $reps, $this->str);
} else {
// $k已存在,二級配置是數(shù)組,需要添加二級或三數(shù)組元素
// 把$v的子元素追加在匹配$k => [之后
// //匹配$k => [
// $kpats = '/\''.$k.'\'\s*=>\s*\[\r?\n/';
// preg_match($kpats,$this->str,$arrk);
// 新增二級配置
// 往數(shù)組中追加子元素
foreach ($v as $kk => $vv) {
// 1. $vv不是數(shù)組
if(!is_array($vv)) {
// 新建二級配置
//匹配$k => [ ***,
//$kpats = '/\''.$k.'\'\s*=>\s*\[[^\[]*,[^\]]/';
//$kpats = '/\''.$k.'\'\s*=>\s*\[[^\[|\]]*,\r?\n/';
// 添加一維數(shù)組,數(shù)組中有元素匹配到最后一個數(shù)組,沒有數(shù)組,匹配到數(shù)組開頭[
$kpats = $this->getArrSonCount(config($this->configName.'.'.$k)) ? '/\''.$k.'\'\s*=>\s*\[[^\[|\]]*,\r?\n/' : '/\''.$k.'\'\s*=>\s*\[\r?\n/';
preg_match($kpats,$this->str,$arrk);
if(!is_int($kk)) {
if(array_key_exists($kk,config($this->configName.'.'.$k))) {
echo $kk.'不能添加已存在的配置項kk';
return false;
}
if(is_string($vv)) {
if(stripos($vv,'::class') == false && stripos($vv,'()') == false && stripos($vv,'//') === false) {
$reps = $arrk[0]."\t\t'". $kk. "' => '" . $vv . "',\n";
} else {
$reps = $arrk[0]."\t\t'". $kk. "' => " . $vv . ",\n";
}
} elseif(is_bool($vv)) {
//布爾
$reps = ($vv == true) ? $arrk[0]."\t\t'" . $kk . "' => true,\n" : $arrk[0]."\t\t'" . $kk . "' => false,\n";
} else {
$reps = $arrk[0]."\t\t'". $kk. "' => " . $vv . ",\n";
}
} else {
if(is_string($vv)) {
if(stripos($vv,'::class') == false && stripos($vv,'()') == false && stripos($vv,'//') === false) {
$reps = $arrk[0] ."\t\t'" . $vv . "',\n";
} else {
$reps = $arrk[0] ."\t\t" . $vv . ",\n";
}
} elseif(is_bool($vv)) {
$reps = ($vv == true) ? $arrk[0] . "\t\ttrue,\n" : $arrk[0] . "\t\tfalse,\n";
} else {
$reps = $arrk[0]."\t\t". $vv . ",\n";
}
}
$this->str = preg_replace($kpats, $reps, $this->str);
} else {
// 2. $vv是數(shù)組
// 匹配到數(shù)組內(nèi)部的后面
$sonArrnum = $this->getArrSonNum(config($this->configName.'.'.$k));
if($sonArrnum > 0) {
// 數(shù)組存在子數(shù)組,匹配到最后一個數(shù)組],\n后面
$kpats = '/\''.$k.'\'([^\]]*\]){'.$sonArrnum.'},\r?\n/';
} else {
// 沒有子數(shù)組
//$kpats = '/\''.$k.'\'\s*=>\s*\[[^\[|\]]*,\r?\n/';
$kpats = $this->getArrSonCount(config($this->configName.'.'.$k)) ? '/\''.$k.'\'\s*=>\s*\[[^\[|\]]*,\r?\n/' : '/\''.$k.'\'\s*=>\s*\[\r?\n/';
}
preg_match($kpats,$this->str,$arrk);
// a.$vv數(shù)組不存在,新建數(shù)組及它的子數(shù)組$kkk
if(!array_key_exists($kk,config($this->configName . '.' . $k))) {
$sonArrson = '';
foreach($vv as $kkk => $vvv) {
// $vvv不是數(shù)組
if(!is_array($vvv)) {
if(!is_int($kkk)) {
if(is_string($vvv)) {
if(stripos($vvv,'::class') == false && stripos($vvv,'()') == false && stripos($vvv,'//') === false) {
$sonArrson .= "\t\t\t'". $kkk. "' => '" . $vvv . "',\n";
} else {
$sonArrson .= "\t\t\t'". $kkk. "' => " . $vvv . ",\n";
}
} elseif(is_bool($vvv)) {
//布爾
$sonArrson .= ($vvv == true) ? "\t\t\t'" . $kkk . "' => true,\n" : "\t\t\t'" . $kkk . "' => false,\n";
} else {
$sonArrson .= "\t\t\t'". $kkk. "' => " . $vvv . ",\n";
}
} else {
if(is_string($vvv)) {
if(stripos($vvv,'::class') == false && stripos($vvv,'()') == false && stripos($vvv,'//') === false) {
$sonArrson .= "\t\t\t'" . $vvv . "',\n";
} else {
$sonArrson .= "\t\t\t".$vvv . ",\n";
}
} elseif(is_bool($vvv)) {
//布爾
$sonArrson .= ($vvv == true) ? "\t\t\ttrue,\n" : "\t\t\tfalse,\n";
} else {
$sonArrson .= "\t\t\t" . $vvv . ",\n";
}
}
} else {
// $vvv是數(shù)組
$sonArrsonArr = '';
foreach($vvv as $kkkk => $vvvv) {
if(!is_int($kkkk)) {
if(array_key_exists($kkkk,config($this->configName.'.'.$k.'.'.$kk.'.'.$kkk))) {
echo $kkkk."已存在?";
return false;
}
if(is_string($vvvv)) {
if(stripos($vvvv,'::class') == false && stripos($vvvv,'()') == false && stripos($vvvv,'//') === false) {
$sonArrsonArr .= "\t\t\t\t'". $kkkk. "' => '" . $vvvv . "',\n";
} else {
$sonArrsonArr .= "\t\t\t\t'". $kkkk. "' => " . $vvvv . ",\n";
}
} elseif(is_bool($vvvv)) {
//布爾
$sonArrsonArr .= ($vvvv == true) ? "\t\t\t\t'" . $kkkk . "' => true,\n" : "\t\t\t\t'" . $kkkk . "' => false,\n";
} else {
$sonArrsonArr .= "\t\t\t\t'". $kkkk. "' => " . $vvvv . ",\n";
}
} else {
if(is_string($vvvv)) {
if(stripos($vvvv,'::class') == false && stripos($vvvv,'()') == false && stripos($vvvv,'//') === false) {
$sonArrsonArr .= "\t\t\t\t'" . $vvvv . "',\n";
} else {
$sonArrsonArr .= "\t\t\t\t" . $vvvv . ",\n";
}
} elseif(is_bool($vvvv)) {
//布爾
$sonArrsonArr .= ($vvvv == true) ? "\t\t\t\ttrue,\n" : "\t\t\t\tfalse,\n";
} else {
$sonArrsonArr .= "\t\t\t\t" . $vvvv . ",\n";
}
}
}
$sonArrson .= "\t\t\t'".$kkk."' => [\n" . $sonArrsonArr . "\t\t\t],\n";
//echo '不支持4級數(shù)組';
}
}
$reps = $arrk[0]."\t\t'". $kk. "' => [\n".$sonArrson."\t\t],\n";
$this->str = preg_replace($kpats, $reps, $this->str);
} else {
// b.$vv數(shù)組已存在
// 匹配包含$k $kk=>[
// $kkpats = '/\'' . $k . '\'[\s\S]*?(?:'.$kk.')\'[^\[]*\[\r?\n/';
// preg_match($kkpats,$this->str,$arrkk);
foreach($vv as $kkk => $vvv) {
//halt(123,$arrkk[0]);
// $vvv不是數(shù)組,追加$kkk
if(!is_array($vvv)) {
// 匹配包含$k $kk=>[ ***,
//$kkpats = '/\'' . $k . '\'[\s\S]*?(?:'.$kk.')\'[^\[]*\[\r?\n/';
//$kkpats = '/\'' . $k . '\'[\s\S]*?(?:'.$kk.')\'\s*=>\s*\[[^\[|\]]*,/';
$kkpats = $this->getArrSonCount(config($this->configName.'.'.$k.'.'.$kk)) ? '/\''.$kk.'\'\s*=>\s*\[[^\[|\]]*,\r?\n/' : '/\''.$kk.'\'\s*=>\s*\[\r?\n/';
preg_match($kkpats,$this->str,$arrkk);
if(!is_int($kkk)) {
//判斷第三級key是否存在
if(array_key_exists($kkk,config($this->configName.'.'.$k.'.'.$kk))) {
echo $kkk.'不能添加已存在的配置項kkk';
return false;
}
if(is_string($vvv)) {
if(stripos($vvv,'::class') == false && stripos($vvv,'()') == false && stripos($vvv,'//') === false) {
$repsk = $arrkk[0]."\t\t\t'". $kkk. "' => '" . $vvv . "',\n";
} else {
$repsk = $arrkk[0]."\t\t\t'". $kkk. "' => " . $vvv . ",\n";
}
} elseif(is_bool($vvv)) {
$repsk = ($vvv == true) ? $arrkk[0]."\t\t\t'" . $kkk . "' => true,\n" : $arrkk[0]."\t\t\t'" . $kkk . "' => false,\n";
} else {
$repsk = $arrkk[0]."\t\t\t'". $kkk. "' => " . $vvv . ",\n";
}
} else {
if(is_string($vvv)) {
if(stripos($vvv,'::class') == false && stripos($vvv,'()') == false && stripos($vvv,'//') === false) {
$repsk = $arrkk[0]."\t\t\t'" . $vvv . "',\n";
} else {
$repsk = $arrkk[0]."\t\t\t" . $vvv . ",\n";
}
} elseif(is_bool($vvv)) {
$repsk = ($vvv == true) ? $arrkk[0]."\t\t\ttrue,\n" : $arrkk[0]."\t\t\tfalse,\n";
} else {
$repsk = $arrkk[0]."\t\t\t" . $vvv . ",\n";
}
}
$this->str = preg_replace($kkpats,$repsk, $this->str);
} else {
// $vvv是數(shù)組,a.數(shù)組存在,b.數(shù)組不存在
//a. $kkk數(shù)組存在
if(array_key_exists($kkk,config($this->configName.'.'.$k.'.'.$kk))) {
//匹配包含$k $kk $kkk 到]的內(nèi)容
//$sonPats = '/\'' . $k . '\'[\s\S]*?(?:'.$kk.')\'[\s\S]*?(?:'.$kkk.')\' [^\]]*/';
//[\s\S]*?(?:'.$kkk.')\'(.*),/
// $k3pats = '/\'' . $kk k. '\'[\s\S]*?(?:'.$kkk.')\'\s*=>\s*\[\r?\n/';
// 正則到數(shù)組內(nèi)的元素,不包含子數(shù)組
//$k3pats = '/\'' . $kkk . '\'\s*=>\s*\[[^\[|\]]*,\r?\n/';
$k3pats = $this->getArrSonCount(config($this->configName.'.'.$k.'.'.$kk.'.'.$kkk)) ? '/\''.$kkk.'\'\s*=>\s*\[[^\[|\]]*,\r?\n/' : '/\''.$kkk.'\'\s*=>\s*\[\r?\n/';
preg_match($k3pats,$this->str,$arrk3);
foreach($vvv as $kkkk => $vvvv) {
preg_match($k3pats,$this->str,$arrk3);
if(!is_int($kkkk)) {
// 多維數(shù)組
if(array_key_exists($kkkk,config($this->configName.'.'.$k.'.'.$kk.'.'.$kkk))) {
echo $kkkk."已存在k4";
return false;
}
if(is_string($vvvv)) {
if(stripos($vvvv,'::class') == false && stripos($vvvv,'()') == false && stripos($vvvv,'//') === false) {
$sonReps = $arrk3[0]."\t\t\t\t'". $kkkk . "' => '" . $vvvv . "',\n";
} else {
$sonReps = $arrk3[0]."\t\t\t\t'". $kkkk . "' => " . $vvvv . ",\n";
}
} elseif(is_bool($vvvv)) {
$sonReps = ($vvvv == true) ? $arrk3[0]."\t\t\t\t'" . $kkkk . "' => true,\n" : $arrk3[0]."\t\t\t\t'" . $kkkk . "' => false,\n";
} else {
$sonReps = $arrk3[0]."\t\t\t\t'". $kkkk . "' => " . $vvvv . ",\n";
}
} else {
// 數(shù)值數(shù)組
if(is_string($vvvv)) {
if(stripos($vvvv,'::class') == false && stripos($vvvv,'()') == false && stripos($vvvv,'//') === false) {
$sonReps = $arrk3[0]."\t\t\t\t'" . $vvvv . "',\n";
} else {
$sonReps = $arrk3[0]."\t\t\t\t" . $vvvv . ",\n";
}
} elseif(is_bool($vvvv)) {
$sonReps = ($vvvv == true) ? $arrk3[0]."\t\t\t\ttrue,\n" : $arrk3[0]."\t\t\t\tfalse,\n";
} else {
$sonReps = $arrk3[0]."\t\t\t\t" . $vvvv . ",\n";
}
}
$this->str = preg_replace($k3pats,$sonReps, $this->str);
}
} else {
// b. $kkk不存在
// 匹配到數(shù)組內(nèi)部的后面k
$sonArrnum = $this->getArrSonNum(config($this->configName.'.'.$k.'.'.$kk));
if($sonArrnum > 0) {
// 數(shù)組存在子數(shù)組,匹配到最后一個數(shù)組],\n后面
$kkpats = '/\''.$kk.'\'([^\]]*\]){'.$sonArrnum.'},\r?\n/';
} else {
// 沒有子數(shù)組k
//$kkpats = '/\''.$kk.'\'\s*=>\s*\[[^\[|\]]*,\r?\n/';
$kkpats = $this->getArrSonCount(config($this->configName.'.'.$k.'.'.$kk)) ? '/\''.$kk.'\'\s*=>\s*\[[^\[|\]]*,\r?\n/' : '/\''.$kk.'\'\s*=>\s*\[\r?\n/';
}
preg_match($kkpats,$this->str,$arrkk);
$sonArrsonArr = '';
foreach($vvv as $kkkk => $vvvv) {
if(is_array($vvvv)) {
echo '不支持四級數(shù)組';
return false;
}
if(!is_int($kkkk)) {
if(is_string($vvvv)) {
if(stripos($vvvv,'::class') == false && stripos($vvvv,'()') == false && stripos($vvvv,'//') === false) {
$sonArrsonArr .= "\t\t\t\t'". $kkkk . "' => '" . $vvvv . "',\n";
} else {
$sonArrsonArr .= "\t\t\t\t'". $kkkk . "' => " . $vvvv . ",\n";
}
} elseif(is_bool($vvvv)) {
$sonArrsonArr .= ($vvvv == true) ? "\t\t\t\t'" . $kkkk . "' => true,\n" : "\t\t\t\t'" . $kkkk . "' => false,\n";
} else {
$sonArrsonArr .= "\t\t\t\t'". $kkkk . "' => " . $vvvv . ",\n";
}
} else {
if(is_string($vvvv)) {
if(stripos($vvvv,'::class') == false && stripos($vvvv,'()') == false && stripos($vvvv,'//') === false) {
$sonArrsonArr .= "\t\t\t\t'" . $vvvv . "',\n";
} else {
$sonArrsonArr .= "\t\t\t\t" . $vvvv . ",\n";
}
} elseif(is_bool($vvvv)) {
$sonArrsonArr .= ($vvvv == true) ? "\t\t\t\ttrue,\n" : "\t\t\t\tfalse,\n";
} else {
$sonArrsonArr .= "\t\t\t\t" . $vvvv . ",\n";
}
}
}
$reps = $arrkk[0]."\t\t\t'".$kkk."' => [\n" . $sonArrsonArr . "\t\t\t],\n";
$this->str = preg_replace($kkpats,$reps, $this->str);
}
}
}
}
}
}
}
}
}
//寫入配置
return file_put_contents($this->configFile, $this->str) ? true : false;
}
}