1. PHP / Говнокод #16462

    +154

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 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;
    }

    Крайне "эффективное" склеивание массивов с настройками из разных источников

    Запостил: proff, 03 Августа 2014

    Комментарии (2) RSS

    Добавить комментарий