/**
* 函数用途描述:除法运算
* @date: 2012-7-25
* @author: CoderQ
* @param : $numerator int/float 分子
* $denominator int/float 分母
* $exception 如果分母异常的输出值
* $decimal 小数点数
* @return: int/float
*/
function divide($numerator, $denominator, $exception=null, $decimal=null)
{
//非法类型
$aInvalidType = array('object', 'array', 'resource', 'null');
//类型判断
if(in_array(gettype($numerator), $aInvalidType) || in_array(gettype($denominator), $aInvalidType))
{
return $exception;
}
//分母有效性检测
if(!preg_match('/^\d+$/', $denominator) || $denominator == 0)
{
return $exception;
}
else
{
return $decimal===null?$numerator / $denominator : number_format($numerator / $denominator, $decimal, '.', '');
}
}
/**
* 函数用途描述:数组重置
* @date: 2012-7-25
* @author: CoderQ
* @param : $array array 需要重置的数组
* $value 默认值
* @return: array
*/
function array_reset_all($array, $value=null)
{
if(gettype($array) != 'array')
{
$array = $value;
}
else
{
foreach(array_keys($array) as $key)
{
array_reset_all (&$array[$key], $value);
}
}
return $array;
}
/**
* 函数用途描述:数组求反
* @date: 2012-7-26
* @author: CoderQ
* @param : $array array 需要求反的数组
* $exception mix 异常的默认值
* @return: array
*/
function array_invert_all($array, $exception=null)
{
switch(gettype($array))
{
case 'array':
foreach(array_keys($array) as $key)
{
array_invert_all (&$array[$key], $exception);
}
break;
case 'integer':
case 'float':
case 'boolean':
$array = - $array;
break;
default:
$array = $exception;
}
return $array;
}
/**
* 函数用途描述:数组加法
* @date: 2012-7-26
* @author: CoderQ
* @param : $minuend array 被减数
* $subtrahend array 减数
* $exception mix 异常时的默认值
* @return: none
*/
function array_add_all($minuend, $subtrahend, $exception=0)
{
switch(gettype($minuend))
{
case 'array':
if(gettype($subtrahend) == 'array')
{
foreach(array_keys($minuend) as $key)
{
if(isset($subtrahend[$key]))
{
array_add_all(&$minuend[$key], $subtrahend[$key], $exception);
}
}
}
break;
case 'NULL':
case 'integer':
case 'float':
case 'boolean':
if(gettype($subtrahend) == 'integer' || gettype($subtrahend) == 'float' || gettype($subtrahend) == 'boolean')
{
$minuend += $subtrahend;
}
break;
default:
$minuend = $exception;
}
return $minuend;
}
/**
* 函数用途描述:数组除法,用于环比同比等
* @特殊说明:该方法以分子数组作为标准
* @date: 2012-7-25
* @author: CoderQ
* @param : $numerator array 分子数组
* $denominator array 分母数组
* $exception 异常输出值
* $decimal 小数位数
* @return: array
*/
function array_divide_all($numerator, $denominator, $exception=null, $decimal=null)
{
switch(gettype($numerator))
{
case 'array':
if(gettype($denominator) == 'array')
{
foreach(array_keys($numerator) as $key)
{
if(isset($denominator[$key]))
{
array_divide_all(&$numerator[$key], $denominator[$key], $exception, $decimal);
}
else
{
$numerator[$key] = array_reset_all($numerator[$key], $exception);
}
}
}
else
{
$numerator = array_reset_all($numerator, $exception);
}
break;
case 'integer':
case 'float':
case 'boolean':
$numerator = divide($numerator, $denominator, $exception, $decimal);
break;
default:
$numerator = $exception;
}
return $numerator;
}
/**
* 函数用途描述:根据完整格式的数组,补齐格式不完整的数组
* @date: 2012-7-25
* @author: CoderQ
* @param : $incomplete array 不完整数组
* $complete array 完整数组
* $default mix 补齐数据时使用的默认值
* @return: array
*/
function array_fill_all($incomplete, $complete=null, $default=null)
{
$reset = func_num_args() == 3 ? true : false;
if(gettype($complete) != 'array')
{
return $reset ? $default : $incomplete;
}
foreach(array_keys($complete) as $key)
{
if(isset($incomplete[$key]))
{
if(gettype($incomplete[$key]) == 'array')
{
if($reset)
{
array_fill_all (&$incomplete[$key], $complete[$key], $default);
}
else
{
array_fill_all (&$incomplete[$key], $complete[$key]);
}
}
}
else
{
$incomplete[$key] = $reset ? array_reset_all($complete[$key], $default) : $complete[$key];
}
}
return $incomplete;
}