PHP 二维数组合并(二)

例如有如下数组:

$arr = array(
        0=>array(
            ‘product‘=>‘120‘,
            ‘type‘=>0
        ),
        1=>array(
            ‘product‘=>‘120‘,
            ‘type‘=>0
        ),
        2=>array(
            ‘product‘=>‘120‘,
            ‘type‘=>1
        ),
        3=>array(
            ‘product‘=>‘121‘,
            ‘type‘=>0
        ),
        4=>array(
            ‘product‘=>‘121‘,
            ‘type‘=>1
        ),
        5=>array(
            ‘product‘=>‘122‘,
            ‘type‘=>2
        ),
        6=>array(
            ‘product‘=>‘122‘,
            ‘type‘=>3
        ),
        7=>array(
            ‘product‘=>‘122‘,
            ‘type‘=>3
        ),
        8=>array(
            ‘product‘=>‘122‘,
            ‘type‘=>3
        ),
        9=>array(
            ‘product‘=>‘123‘,
            ‘type‘=>2
        ),
);

要求:

① 相同 product 值的数组要合并成一个数组,并计算具有相同 product 的数组的个数;

② 计算相同 product 值的数组的 type,相同的 type 保留一个,并计该 type 相加的数量;不同的 type 也进行保留,数量为1

即将上面的数组转换为下面的数组:

array
  2 =>
    array
      ‘product‘ => string ‘120‘ (length=3)
      ‘count‘ => int 3
      ‘newtype‘ =>
        array
          0 => int 2
          1 => int 1
  4 =>
    array
      ‘product‘ => string ‘121‘ (length=3)
      ‘count‘ => int 2
      ‘newtype‘ =>
        array
          0 => int 1
          1 => int 1
  8 =>
    array
      ‘product‘ => string ‘122‘ (length=3)
      ‘count‘ => int 4
      ‘newtype‘ =>
        array
          2 => int 1
          3 => int 3
  9 =>
    array
      ‘product‘ => string ‘123‘ (length=3)
      ‘count‘ => int 1
      ‘newtype‘ =>
        array
          2 => int 1

php:

<?php

$arr = array(
        0=>array(
            ‘product‘=>‘120‘,
            ‘type‘=>0
        ),
        1=>array(
            ‘product‘=>‘120‘,
            ‘type‘=>0
        ),
        2=>array(
            ‘product‘=>‘120‘,
            ‘type‘=>1
        ),
        3=>array(
            ‘product‘=>‘121‘,
            ‘type‘=>0
        ),
        4=>array(
            ‘product‘=>‘121‘,
            ‘type‘=>1
        ),
        5=>array(
            ‘product‘=>‘122‘,
            ‘type‘=>2
        ),
        6=>array(
            ‘product‘=>‘122‘,
            ‘type‘=>3
        ),
        7=>array(
            ‘product‘=>‘122‘,
            ‘type‘=>3
        ),
        8=>array(
            ‘product‘=>‘122‘,
            ‘type‘=>3
        ),
        9=>array(
            ‘product‘=>‘123‘,
            ‘type‘=>2
        ),
);

var_dump($arr);

//首先对数组排序,例如:order by product asc,type asc
$i = 1;
$j = 1;
$newtype = array();
foreach($arr as $k=>$v){

    if($k < count($arr)-1){

        if($arr[$k][‘product‘] == $arr[$k+1][‘product‘]){

            if($arr[$k][‘type‘] == $arr[$k+1][‘type‘]){
                $j++;
                $newtype[$arr[$k][‘product‘]][$arr[$k+1][‘type‘]] = $j;
            }else{
                $j = 1;
                $newtype[$arr[$k][‘product‘]][$arr[$k+1][‘type‘]] = $j;
            }

            $i++;
            $arr[$k+1][‘count‘] = $i;
            $arr[$k][‘del‘] = 1;
        }else{

            $j = 1;
            $newtype[$arr[$k+1][‘product‘]][$arr[$k+1][‘type‘]] = $j;

            $i = 1;
            $arr[$k+1][‘count‘] = $i;
        }
    }
}

foreach ($arr as $k=>$v) {
    if(@$arr[$k][‘del‘]){
        unset($arr[$k]);
    }
}
echo ‘<hr>‘;
var_dump($arr);
echo ‘<hr>‘;
var_dump($newtype);

foreach($arr as $key=>$val){
    foreach ($newtype as $k => $v) {
        if($arr[$key][‘product‘] == $k){
            $arr[$key][‘newtype‘] = $v;
        }
    }
    unset($arr[$key][‘type‘]);
}

echo ‘<hr>‘;
var_dump($arr);
时间: 2024-10-12 09:17:26

PHP 二维数组合并(二)的相关文章

PHP二维数组合并,根据某个key合并

/** *PHP二维数组合并,根据某个key合并 * @param type $v 要传入的组合阵列 * @param type $keyname 对应的KEY名称. * @param type $valname 要写入的值KEY名称 * @param type $s 重组译的阵例.预设空值. */ function test($v,$keyname,$valname,$s=Array()){ foreach($v AS $_k => $d){ $s[$d[$keyname]][$valname

二维数组及二维指针的传递及一些思考

二维数组和二位指针在程序知识中是一个难点,往往会将人弄得头昏眼花.总结一下这个难点的相关问题. 二维数组,顾名思义就是数组的数组:二维指针是指针的指针.首先,我们来看看二维数组和二维指针等价的问题. 在<C专家编程>10.3节的小启发里讲的很透彻:(以下这段文字及对比一定要认真分析!) 数组和指针参数是如何被编译器修改的? "数组名被改写成一个指针参数"规则并不是递归定义的.数组的数组会被改写成"数组的指针",而不是"指针的指针":

【C语言探索之一】二维数组,二维数组名的意义

1.一维数组 一维数组名,代表两个(1)代表整个数组(虽然谭老爷子的书上说不能,但是只是那个情境下) (2)代表首地址 2.二维数组 想到二维数组在指针方面的理解很是麻烦,所以我自己想了一种理解方式,如下图所示 二维数组名的意义感觉很难受,所以自己来探索下其代表些什么 下面是我的代码和结果 可以看到他们四个的值是一模一样的,但是意义不一样的 1.b数组名,他是指向整个数组的指针, 2.*b是数组第一维的首地址,相当于b[0] 3.&b目的是为了看出数组名的地址,最后结果显而易见,他的地址也是这个

将一个二维数组合并成一个一维数组

大家都知道php有内置的数组合并函数array_merage($arr,$arr1,$arr2,$arr3);那如何把一个二维数组如array(array('a'=>1,'b'=>2),array('c'=>3,'d'=>4)) 合并成如下的数组 array('a'=>1,'b'=>2,'c'=>3,'d'=>4);似乎,php目前还没有这样的内置函数吧,于是自己动手写了两种方法,仅供大家参考 第一种.方法当然是递归法呢,代码如下 <?php $new

c++ 动态分配二维数组 new 二维数组

#include "stdafx.h" #include <iostream> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { //建立一个16行5列的数组 int **p = new int*[16];//分配堆内存16个 int* for(int i = 0;i < 16;i++)//分配堆内存给每一个int* p[i] = new int[5]; //给这个数组赋值 int k = 0; f

Undefined offset原因以及解决办法-php利用for遍历二维数组方法-二维数组怎么遍历

<?php $arr3 = [ [1,2,3], [4,5,6,7], [8,9,10,11,12], ]; $len = count($arr3); $num2 = 0; $zong = 0; for($i = 0; $i < $len; $i++) { $tem = $arr3[$i]; $len2 = count($tem); for($j = 0; $j < $len2; $j++) { $num2 += $tem[$j]; $zong++; } } echo "<

PHP处理二维数组合并 时间复杂度O(n)

一直没怎么写博客,感觉很多东西都遗忘, 在写ArrayAccess同时把时间复杂度温习下 ,这篇博客给大家说说关于PHP预定义接口中常用到的重量级人物: ArrayAccess.大家也许会问,最基本.最常用的预定义接口有6个呢,为啥非得说这个.从日常的使用情况来看:这个出现的频率非常高,特别是在框架中,比如Laravel.Slim等都会用到,并且用得非常经典,让人佩服啊.从技术上说:说实话其他的我用的少啊!只是知道简单的用法,对他的理解比较浅显,不敢在这里误导大家,哈哈!今天我要写的内容也不一定

折腾二维数组(二)

#include<iostream> using namespace std; int main () { int i,j; int a[5][4]= {{0,1},{4,5},{8,9},{12,13},{16,17}}; cout<<"请输入10个整数:"<<endl; for (i=0; i<5; i++) for (j=2; j<4; j++) cin>>a[i][j]; cout<<"数组中的值

php将一个二维数组按照某个字段值合并成一维数组,如果有重复则将重复的合并成二维数组

版权声明:本文为博主原创文章,未经博主允许不得转载. 最近工作中碰到一个问题,用PHP将一个二维数组按照二维数组中的各个项中的某个特定字段值合并成一维数组,如果有重复则将重复的合并成二维数组,生成的二维数组的第一维的键是特定字段的值,二维的键可以是随机索引,也可以是其中的另一个字段的值.其实这个需求经常会在工作中碰到,只是碰到的时候一个有重复的就直接用之前的覆盖后面的或者用之后的覆盖之前的,这样很容易就可以处理了.很少碰到这种有一维数组又有二维数组的情况,先上代码: $a = array( 0