自己扩展的几个多维数组处理函数

/**
* 函数用途描述:除法运算
* @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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值