- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
function UsersDefineParameters(&$db_parameters, &$cookie_parameters, $key = '', $is_check_db = false)
{
global $CONFIG, $USER, $SCRIPT;
if (!$key) $key = array();
$SCRIPT[ttt] = $is_check_db ? 1 : 0;
$default_val = tieArrayValue($CONFIG[defaults], $key);
$SCRIPT[ttt] = 0;
$user_val = tieArrayValue($USER[parameters], $key);
$db_val = tieArrayValue($db_parameters, $key);
$cookie_val = tieArrayValue($cookie_parameters, $key);
if ($is_check_db)
{
if (!is_array($db_val) || (isListArray($db_val) && count($db_val) == 2 && is_int($db_val[1])))
{if (!isset($default_val)) tieArrayValue($USER[parameters], $key, is_array($db_val) ? $db_val[0] : $db_val);}
else foreach ($db_val as $k=>$v) UsersDefineParameters($db_parameters, $cookie_parameters, array_merge($key, array($k)), 1);
}
else
if (!is_array($default_val) || (isListArray($default_val) && count($default_val) == 2 && is_int($default_val[1])))
{
$use_cookie = !is_array($default_val) || $default_val[1];
$keys = array(db, cookie);
foreach ($keys as $k)
if (isset(${$k._val}))
{${$k._time} = is_array(${$k._val}) ? (int)${$k._val}[1] : 0; if (is_array(${$k._val})) ${$k._val} = ${$k._val}[0];}
if (isset($db_val) && (!$use_cookie || !isset($cookie_val) || $db_time >= $cookie_time)) {$val = $db_val; $time = $db_time;}
elseif ($use_cookie && isset($cookie_val)) {$val = $cookie_val; $time = $cookie_time;}
else {$val = is_array($default_val) ? $default_val[0] : $default_val; unset($time);}
if (isset($time))
{
if ($val != $db_val) {tieArrayValue($SCRIPT[write_db_parameters], $key, array($val,$time)); $SCRIPT[is_write_db_parameters] = true;}
if ($use_cookie) tieArrayValue($SCRIPT[write_cookie_parameters], $key, array($val, $time));
}
tieArrayValue($USER[parameters], $key, $val);
}
else foreach ($default_val as $k=>$v) UsersDefineParameters($db_parameters, $cookie_parameters, array_merge($key, array($k)));
if (!$is_check_db && !$key) UsersDefineParameters($db_parameters, $cookie_parameters, '', 1);
}
function tieArrayValue(&$arr, $key, $value = '')
{
if (is_string($key)) $key = explode('][',substr($key,1,-1));
$element = &$arr;
$count=count($key);
for ($i=0;$i<$count;$i++) $element = &$element[$key[$i]];
if (func_num_args() == 3) {$element = $value; unset($arr);}
else return $element;
}
function isListArray($arr)
{
if (!is_array($arr)) return false;
@reset($arr); $i = 0;
while (list($key) = @each($arr)) if ((string)$key != (string)$i++) return false;
return true;
}
Крайне "эффективное" склеивание массивов с настройками из разных источников
kegdan 03.08.2014 12:14 # +2
gost 04.08.2014 07:18 # 0