php 把多维数组中,某值相同的项合并,重组数据(不用再愁postgres中无mysql中的group_concat()功能)

PHP合并多维数组按值分组
这篇博客介绍如何使用PHP处理多维数组,通过特定值进行分组,解决了在Postgres中无法直接使用类似MySQL的group_concat()功能的问题。
对数组$array重组:


        $array = array(
                    array('id'=>1,'name'=>'aa','pwd'=>'12'),
                    array('id'=>1,'name'=>'bb','pwd'=>'56'),
                    array('id'=>1,'name'=>'saa','pwd'=>'89'),
                    
                    array('id'=>2,'name'=>'cc','pwd'=>'78')
              );
实现代码如下:

       $tmpArray = array();
        foreach ($array as $row) {
            
            $key = $row['id'];
            if (array_key_exists($key, $tmpArray)) {
                //$tmpArray[$key]['pwd'] = $tmpArray[$key]['pwd']  . ',' . $row['pwd'];  //用这句的话下面有关pwd的条件语句都要删掉,实现其字符串形式
                if (is_array($tmpArray[$key]['name'])) {
                    $tmpArray[$key]['name'][] = $row['name'];
                } else {
                    $tmpArray[$key]['name'] = array($tmpArray[$key]['name'], $row['name']);
                }
                if (is_array($tmpArray[$key]['pwd'])) {
                    $tmpArray[$key]['pwd'][] = $row['pwd'];
                } else {
                    $tmpArray[$key]['pwd'] = array($tmpArray[$key]['pwd'], $row['pwd']);
                }
            } else {
                $tmpArray[$key] = array('id'=>$row['id'],'name'=>array($row['name']),'pwd'=>array($row['pwd'])); //此句要注意,可设置
                // $tmpArray[$key] = $row; // 有字段相加时可能会代替上面一句
            }
        }

        echo "<pre>";
        var_dump($tmpArray);

打印结果为:

array (size=2)
  1 => 
    array (size=3)
      'id' => int 1
      'name' => 
        array (size=3)
          0 => string 'aa' (length=2)
          1 => string 'bb' (length=2)
          2 => string 'saa' (length=3)
      'pwd' => 
        array (size=3)
          0 => string '12' (length=2)
          1 => string '56' (length=2)
          2 => string '89' (length=2)
  2 => 
    array (size=3)
      'id' => int 2
      'name' => 
        array (size=1)
          0 => string 'cc' (length=2)
      'pwd' => 
        array (size=1)
          0 => string '78' (length=2)


      

实现了用上面的id值来分组。

 

 // $field 为一维数字数组,$field[0]为用于分组的单一字段。   

        public function combine($array,$field){
        	$tmpArray = array();
        	$distinct_field = $field[0];
        	unset($field[0]);
        	foreach ($array as $row) {
        		$key = $row[$distinct_field];
        		if (array_key_exists($key, $tmpArray)) {
        			foreach($field as $value){
	        			if (is_array($tmpArray[$key][$value])) {
	        				$tmpArray[$key][$value][] = $row[$value];
	        			} else {
	        				$tmpArray[$key][$value] = array($tmpArray[$key][$value], $row[$value]);
	        			}
        			}
        		} else {
        			$tmpArray[$key][$distinct_field] = $row[$distinct_field];
        			foreach ($field as $value){
        				$tmpArray[$key][$value] = array($row[$value]);
        			}
        		}
        	}
        	return $tmpArray;
        }

       




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值