这个是discuz的安装程序的一段代码,有一点没弄明白,$ks[$level] = $ks[$level - 1]."['$key']";这里的$level - 1应该是-1啊,为什么断点输出的时候是0;求解释function buildarray($array, $level = 0, $pre = '$_config') {
static $ks;
if($level == 0) {
$ks = array();
$return = '';
} foreach ($array as $key => $val) {
if($level == 0) {
$newline = str_pad(' CONFIG '.strtoupper($key).' ', 70, '-', STR_PAD_BOTH);
$return .= "\r\n// $newline //\r\n";
if($key == 'admincp') {
$newline = str_pad(' Founders: $_config[\'admincp\'][\'founder\'] = \'1,2,3\'; ', 70, '-', STR_PAD_BOTH);
$return .= "// $newline //\r\n";
}
}
$ks[$level] = $ks[$level - 1]."['$key']";
if(is_array($val)) {
$ks[$level] = $ks[$level - 1]."['$key']";
$return .= buildarray($val, $level + 1, $pre);
} else {
$val = is_string($val) || strlen($val) > 12 || !preg_match("/^\-?[1-9]\d*$/", $val) ? '\''.addcslashes($val, '\'\\').'\'' : $val;
$return .= $pre.$ks[$level - 1]."['$key']"." = $val;\r\n";
}
}
print_r($ks);
return $return;
}
static $ks;
if($level == 0) {
$ks = array();
$return = '';
} foreach ($array as $key => $val) {
if($level == 0) {
$newline = str_pad(' CONFIG '.strtoupper($key).' ', 70, '-', STR_PAD_BOTH);
$return .= "\r\n// $newline //\r\n";
if($key == 'admincp') {
$newline = str_pad(' Founders: $_config[\'admincp\'][\'founder\'] = \'1,2,3\'; ', 70, '-', STR_PAD_BOTH);
$return .= "// $newline //\r\n";
}
}
$ks[$level] = $ks[$level - 1]."['$key']";
if(is_array($val)) {
$ks[$level] = $ks[$level - 1]."['$key']";
$return .= buildarray($val, $level + 1, $pre);
} else {
$val = is_string($val) || strlen($val) > 12 || !preg_match("/^\-?[1-9]\d*$/", $val) ? '\''.addcslashes($val, '\'\\').'\'' : $val;
$return .= $pre.$ks[$level - 1]."['$key']"." = $val;\r\n";
}
}
print_r($ks);
return $return;
}
(
[db] => Array
(
[1] => Array
(
[dbhost] => 127.0.0.1
[dbuser] => root
[dbpw] => 123
[dbcharset] => utf8
[pconnect] => 0
[dbname] => ultrax_7XhbMs
[tablepre] => pre_
) [common] => Array
(
[slave_except_table] =>
) [slave] => Array
(
) [map] => Array
(
) ) [memory] => Array
(
[prefix] => vQbPi0_
[eaccelerator] => 1
[apc] => 1
[xcache] => 1
[memcache] => Array
(
[server] =>
[port] => 11211
[pconnect] => 1
[timeout] => 1
) ) [server] => Array
(
[id] => 1
) [download] => Array
(
[readmod] => 2
[xsendfile] => Array
(
[type] => 0
[dir] => /down/
) ) [cache] => Array
(
[type] => sql
) [output] => Array
(
[charset] => utf-8
[forceheader] => 1
[gzip] => 0
[tplrefresh] => 1
[language] => zh_cn
[staticurl] => static/
[ajaxvalidate] => 0
[iecompatible] => 0
) [cookie] => Array
(
[cookiepre] => AAvI_
[cookiedomain] =>
[cookiepath] => /
) [security] => Array
(
[authkey] => e926f18LJRxCMdzp
[urlxssdefend] => 1
[attackevasive] => 0
[querysafe] => Array
(
[status] => 1
[dfunction] => Array
(
[0] => load_file
[1] => hex
[2] => substring
[3] => if
[4] => ord
[5] => char
) [daction] => Array
(
[0] => intooutfile
[1] => intodumpfile
[2] => unionselect
[3] => (select
[4] => unionall
[5] => uniondistinct
) [dnote] => Array
(
[0] => /*
[1] => */
[2] => #
[3] => --
[4] => "
) [dlikehex] => 1
[afullnote] => 0
) ) [admincp] => Array
(
[founder] => 1
[forcesecques] => 0
[checkip] => 1
[runquery] => 1
[dbimport] => 1
) [remote] => Array
(
[on] => 0
[dir] => remote
[appkey] => 62cf0b3c3e6a4c9468e7216839721d8e
[cron] => 0
))
$ks = array();
$return = '';
}如果参数是默认值0,直接返回空字符串了,要执行下面的代码流程,,level参数必然是个非0值
$ks[$level] = $ks[$level - 1]."['$key']";
吗?另有
if($level == 0) {
$ks = array();
递归时
buildarray($val, $level + 1, $pre);所以 $level 不可能小于 0
$ks[$level - 1] 也就不可能存在,$ks[$level - 1]只能是空