php兑现数组的合并

WBOY
发布: 2016-06-13 13:03:14
原创
904 人浏览过

php实现数组的合并
最近做一个报表,要求若某几项相同就合并这几行,并将数字项相加显示。

首先考虑遍历数组,拿出数组的最后一项跟其它项比较,若符合条件则做合并操作并删除该项。

但是实际运行,发现执行3次后就不执行了,而这时的数组长度是6.一直没搞懂为什么不继续执行了。数组是采用&引用删除的,删除项确影响到了原数组的。


后来想到一个办法,既然删除会影响遍历,那就不删除,而是将该项的值设置为空。问题就解决了,最后用array_filter过滤下空值就可以了。

代码如下

//合并itemsearch的结果
	private function mergeList(&$arr)
	{
		$data = array();
		$n = &$arr;
		foreach ($n as $key => $value) {
			if(!$value) continue;
			array_push($data,$this->getItem($value,$n));
		}
		return array_filter($data);
	}
	private function getItem(&$item,&$arr){
		foreach ($arr as $key => $value) {
			if(!$value) {
				continue;
			};
			if($item["itemTypeName"] == $value["itemTypeName"]
			&& $item["weight"] == $value["weight"]
			&& $item["type"] == $value["type"]){
				if($item["itemTypeId"] == $value["itemTypeId"]
					&& $item["warehouseId"] == $value["warehouseId"]){
					continue;	
				}else{
					$item["stockIn"] += $value["stockIn"];
					$item["remain"] += $value["remain"];
					$item["stockOut"] += $value["stockOut"];
					$item["stockIn"] = sprintf("%.4f",$item["stockIn"]);
					$item["remain"] = sprintf("%.4f",$item["remain"]);
					$item["stockOut"] = sprintf("%.4f",$item["stockOut"]);
					$arr[$key] = "";
				}
			}
		}
		return $item;
	}
登录后复制
相关标签:
amp
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板