zoukankan      html  css  js  c++  java
  • php将一个二维数组按照某个字段值合并成一维数组,如果有重复则将重复的合并成二维数组

    版权声明:本文为博主原创文章,未经博主允许不得转载。

    最近工作中碰到一个问题,用PHP将一个二维数组按照二维数组中的各个项中的某个特定字段值合并成一维数组,如果有重复则将重复的合并成二维数组,生成的二维数组的第一维的键是特定字段的值,二维的键可以是随机索引,也可以是其中的另一个字段的值。其实这个需求经常会在工作中碰到,只是碰到的时候一个有重复的就直接用之前的覆盖后面的或者用之后的覆盖之前的,这样很容易就可以处理了。很少碰到这种有一维数组又有二维数组的情况,先上代码:

    $a = array(  
        0 => array('target_id' => '22', 'target_type' => '1', 'phone_type' => '1', 'extension_number' => '15261', 'phone_id' => '1', 'phone_number' => '4008285599', 'extension_special' => NULL,),  
        1 => array('target_id' => '22', 'target_type' => '1', 'phone_type' => '2', 'extension_number' => '66002', 'phone_id' => '1', 'phone_number' => '4008285599', 'extension_special' => '1',),  
        14 => array('target_id' => '22', 'target_type' => '1','phone_type' => '4', 'extension_number' => '56431', 'phone_id' => '1', 'phone_number' => '4008285599', 'extension_special' => NULL,),  
        2 => array('target_id' => '24', 'target_type' => '1', 'phone_type' => '1', 'extension_number' => '54876', 'phone_id' => '1', 'phone_number' => '4008285599', 'extension_special' => '1',),  
        3 => array('target_id' => '25', 'target_type' => '1', 'phone_type' => '1', 'extension_number' => '07143', 'phone_id' => '1', 'phone_number' => '4008285599', 'extension_special' => NULL,),  
        13 => array('target_id' => '24', 'target_type' => '1', 'phone_type' => '0', 'extension_number' => '96949', 'phone_id' => '1', 'phone_number' => '4008285599', 'extension_special' => NULL,),  
        4 => array('target_id' => '26', 'target_type' => '1', 'phone_type' => '1', 'extension_number' => '94755', 'phone_id' => '1', 'phone_number' => '4008285599', 'extension_special' => NULL,),  
        5 => array('target_id' => '30', 'target_type' => '1', 'phone_type' => '1', 'extension_number' => '14171', 'phone_id' => '1', 'phone_number' => '4008285599', 'extension_special' => NULL,),  
        6 => array('target_id' => '36', 'target_type' => '1', 'phone_type' => '1', 'extension_number' => '54876', 'phone_id' => '1', 'phone_number' => '4008285599', 'extension_special' => '1',),  
        7 => array('target_id' => '42', 'target_type' => '1', 'phone_type' => '1', 'extension_number' => '31354', 'phone_id' => '1', 'phone_number' => '4008285599', 'extension_special' => NULL,),  
        8 => array('target_id' => '43', 'target_type' => '1', 'phone_type' => '1', 'extension_number' => '66810', 'phone_id' => '1', 'phone_number' => '4008285599', 'extension_special' => NULL,),  
        9 => array('target_id' => '45', 'target_type' => '1', 'phone_type' => '1', 'extension_number' => '34868', 'phone_id' => '1', 'phone_number' => '4008285599', 'extension_special' => NULL,),  
        10 => array('target_id' => '50', 'target_type' => '1', 'phone_type' => '1', 'extension_number' => '79523', 'phone_id' => '1', 'phone_number' => '4008285599', 'extension_special' => NULL,),  
        11 => array('target_id' => '149', 'target_type' => '1', 'phone_type' => '1', 'extension_number' => '59438', 'phone_id' => '1', 'phone_number' => '4008285599', 'extension_special' => NULL,),  
        12 => array('target_id' => '806', 'target_type' => '1', 'phone_type' => '1', 'extension_number' => '14780', 'phone_id' => '1', 'phone_number' => '4008285599', 'extension_special' => NULL,),  
    );  
    $target = array();  
    $temp = array();  
    foreach ($a as $val) {  
        if (!empty($target)) {  
            if (in_array($val['target_id'], array_keys($target))) {  
                if (!empty($temp[$val['target_id']])) {  
                    $target[$val['target_id']] = null;  
                    $target[$val['target_id']][$temp[$val['target_id']]['phone_type']] = $temp[$val['target_id']];  
                    $temp[$val['target_id']] = null;  
                }  
                $target[$val['target_id']][$val['phone_type']] = $val;  
            } else {  
                $temp[$val['target_id']] = $val;  
                $target[$val['target_id']] = $val;  
            }  
        } else {  
            $temp[$val['target_id']] = $val;  
            $target[$val['target_id']] = $val;  
        }  
    }  
    var_dump($target);exit;  
    这个返回的结果形如:

    array  
      22 =>   
        array  
          1 =>   
            array  
              'target_id' => string '22' (length=2)  
              'target_type' => string '1' (length=1)  
              'phone_type' => string '1' (length=1)  
              'extension_number' => string '15261' (length=5)  
              'phone_id' => string '1' (length=1)  
              'phone_number' => string '4008285599' (length=10)  
              'extension_special' => null  
          2 =>   
            array  
              'target_id' => string '22' (length=2)  
              'target_type' => string '1' (length=1)  
              'phone_type' => string '2' (length=1)  
              'extension_number' => string '66002' (length=5)  
              'phone_id' => string '1' (length=1)  
              'phone_number' => string '4008285599' (length=10)  
              'extension_special' => string '1' (length=1)  
          4 =>   
            array  
              'target_id' => string '22' (length=2)  
              'target_type' => string '1' (length=1)  
              'phone_type' => string '4' (length=1)  
              'extension_number' => string '56431' (length=5)  
              'phone_id' => string '1' (length=1)  
              'phone_number' => string '4008285599' (length=10)  
              'extension_special' => null  
      24 =>   
        array  
          1 =>   
            array  
              'target_id' => string '24' (length=2)  
              'target_type' => string '1' (length=1)  
              'phone_type' => string '1' (length=1)  
              'extension_number' => string '54876' (length=5)  
              'phone_id' => string '1' (length=1)  
              'phone_number' => string '4008285599' (length=10)  
              'extension_special' => string '1' (length=1)  
          0 =>   
            array  
              'target_id' => string '24' (length=2)  
              'target_type' => string '1' (length=1)  
              'phone_type' => string '0' (length=1)  
              'extension_number' => string '96949' (length=5)  
              'phone_id' => string '1' (length=1)  
              'phone_number' => string '4008285599' (length=10)  
              'extension_special' => null  
      25 =>   
        array  
          'target_id' => string '25' (length=2)  
          'target_type' => string '1' (length=1)  
          'phone_type' => string '1' (length=1)  
          'extension_number' => string '07143' (length=5)  
          'phone_id' => string '1' (length=1)  
          'phone_number' => string '4008285599' (length=10)  
          'extension_special' => null  
      26 =>   
        array  
          'target_id' => string '26' (length=2)  
          'target_type' => string '1' (length=1)  
          'phone_type' => string '1' (length=1)  
          'extension_number' => string '94755' (length=5)  
          'phone_id' => string '1' (length=1)  
          'phone_number' => string '4008285599' (length=10)  
          'extension_special' => null  
      30 =>   
        array  
          'target_id' => string '30' (length=2)  
          'target_type' => string '1' (length=1)  
          'phone_type' => string '1' (length=1)  
          'extension_number' => string '14171' (length=5)  
          'phone_id' => string '1' (length=1)  
          'phone_number' => string '4008285599' (length=10)  
          'extension_special' => null  
      36 =>   
        array  
          'target_id' => string '36' (length=2)  
          'target_type' => string '1' (length=1)  
          'phone_type' => string '1' (length=1)  
          'extension_number' => string '54876' (length=5)  
          'phone_id' => string '1' (length=1)  
          'phone_number' => string '4008285599' (length=10)  
          'extension_special' => string '1' (length=1)  
      42 =>   
        array  
          'target_id' => string '42' (length=2)  
          'target_type' => string '1' (length=1)  
          'phone_type' => string '1' (length=1)  
          'extension_number' => string '31354' (length=5)  
          'phone_id' => string '1' (length=1)  
          'phone_number' => string '4008285599' (length=10)  
          'extension_special' => null  
      43 =>   
        array  
          'target_id' => string '43' (length=2)  
          'target_type' => string '1' (length=1)  
          'phone_type' => string '1' (length=1)  
          'extension_number' => string '66810' (length=5)  
          'phone_id' => string '1' (length=1)  
          'phone_number' => string '4008285599' (length=10)  
          'extension_special' => null  
      45 =>   
        array  
          'target_id' => string '45' (length=2)  
          'target_type' => string '1' (length=1)  
          'phone_type' => string '1' (length=1)  
          'extension_number' => string '34868' (length=5)  
          'phone_id' => string '1' (length=1)  
          'phone_number' => string '4008285599' (length=10)  
          'extension_special' => null  
      50 =>   
        array  
          'target_id' => string '50' (length=2)  
          'target_type' => string '1' (length=1)  
          'phone_type' => string '1' (length=1)  
          'extension_number' => string '79523' (length=5)  
          'phone_id' => string '1' (length=1)  
          'phone_number' => string '4008285599' (length=10)  
          'extension_special' => null  
      149 =>   
        array  
          'target_id' => string '149' (length=3)  
          'target_type' => string '1' (length=1)  
          'phone_type' => string '1' (length=1)  
          'extension_number' => string '59438' (length=5)  
          'phone_id' => string '1' (length=1)  
          'phone_number' => string '4008285599' (length=10)  
          'extension_special' => null  
      806 =>   
        array  
          'target_id' => string '806' (length=3)  
          'target_type' => string '1' (length=1)  
          'phone_type' => string '1' (length=1)  
          'extension_number' => string '14780' (length=5)  
          'phone_id' => string '1' (length=1)  
          'phone_number' => string '4008285599' (length=10)  
          'extension_special' => null 
    

      如果不想要生成的二维数组的key值,或者说再精简些,可以这样:

    $a = array(  
        0 => array('target_id' => '22', 'target_type' => '1', 'phone_type' => '1', 'extension_number' => '15261', 'phone_id' => '1', 'phone_number' => '4008285599', 'extension_special' => NULL,),  
        1 => array('target_id' => '22', 'target_type' => '1', 'phone_type' => '2', 'extension_number' => '66002', 'phone_id' => '1', 'phone_number' => '4008285599', 'extension_special' => '1',),  
        14 => array('target_id' => '22', 'target_type' => '1','phone_type' => '4', 'extension_number' => '56431', 'phone_id' => '1', 'phone_number' => '4008285599', 'extension_special' => NULL,),  
        2 => array('target_id' => '24', 'target_type' => '1', 'phone_type' => '1', 'extension_number' => '54876', 'phone_id' => '1', 'phone_number' => '4008285599', 'extension_special' => '1',),  
        3 => array('target_id' => '25', 'target_type' => '1', 'phone_type' => '1', 'extension_number' => '07143', 'phone_id' => '1', 'phone_number' => '4008285599', 'extension_special' => NULL,),  
        13 => array('target_id' => '24', 'target_type' => '1', 'phone_type' => '0', 'extension_number' => '96949', 'phone_id' => '1', 'phone_number' => '4008285599', 'extension_special' => NULL,),  
        4 => array('target_id' => '26', 'target_type' => '1', 'phone_type' => '1', 'extension_number' => '94755', 'phone_id' => '1', 'phone_number' => '4008285599', 'extension_special' => NULL,),  
        5 => array('target_id' => '30', 'target_type' => '1', 'phone_type' => '1', 'extension_number' => '14171', 'phone_id' => '1', 'phone_number' => '4008285599', 'extension_special' => NULL,),  
        6 => array('target_id' => '36', 'target_type' => '1', 'phone_type' => '1', 'extension_number' => '54876', 'phone_id' => '1', 'phone_number' => '4008285599', 'extension_special' => '1',),  
        7 => array('target_id' => '42', 'target_type' => '1', 'phone_type' => '1', 'extension_number' => '31354', 'phone_id' => '1', 'phone_number' => '4008285599', 'extension_special' => NULL,),  
        8 => array('target_id' => '43', 'target_type' => '1', 'phone_type' => '1', 'extension_number' => '66810', 'phone_id' => '1', 'phone_number' => '4008285599', 'extension_special' => NULL,),  
        9 => array('target_id' => '45', 'target_type' => '1', 'phone_type' => '1', 'extension_number' => '34868', 'phone_id' => '1', 'phone_number' => '4008285599', 'extension_special' => NULL,),  
        10 => array('target_id' => '50', 'target_type' => '1', 'phone_type' => '1', 'extension_number' => '79523', 'phone_id' => '1', 'phone_number' => '4008285599', 'extension_special' => NULL,),  
        11 => array('target_id' => '149', 'target_type' => '1', 'phone_type' => '1', 'extension_number' => '59438', 'phone_id' => '1', 'phone_number' => '4008285599', 'extension_special' => NULL,),  
        12 => array('target_id' => '806', 'target_type' => '1', 'phone_type' => '1', 'extension_number' => '14780', 'phone_id' => '1', 'phone_number' => '4008285599', 'extension_special' => NULL,),  
    );  
    $target = array();  
    $temp = array();  
    foreach ($a as $val) {  
        if (!empty($target)) {  
            if (in_array($val['target_id'], array_keys($target))) {  
                if (!empty($temp[$val['target_id']])) {  
                    $target[$val['target_id']] = null;  
                    $target[$val['target_id']][] = $temp[$val['target_id']];  
                    $temp[$val['target_id']] = null;  
                }  
                $target[$val['target_id']][] = $val;  
            } else {  
                $temp[$val['target_id']] = $val;  
                $target[$val['target_id']] = $val;  
            }  
        } else {  
            $temp[$val['target_id']] = $val;  
            $target[$val['target_id']] = $val;  
        }  
    }  
    var_dump($target);exit; 
    

      生成结果如:

    array  
      22 =>   
        array  
          0 =>   
            array  
              'target_id' => string '22' (length=2)  
              'target_type' => string '1' (length=1)  
              'phone_type' => string '1' (length=1)  
              'extension_number' => string '15261' (length=5)  
              'phone_id' => string '1' (length=1)  
              'phone_number' => string '4008285599' (length=10)  
              'extension_special' => null  
          1 =>   
            array  
              'target_id' => string '22' (length=2)  
              'target_type' => string '1' (length=1)  
              'phone_type' => string '2' (length=1)  
              'extension_number' => string '66002' (length=5)  
              'phone_id' => string '1' (length=1)  
              'phone_number' => string '4008285599' (length=10)  
              'extension_special' => string '1' (length=1)  
          2 =>   
            array  
              'target_id' => string '22' (length=2)  
              'target_type' => string '1' (length=1)  
              'phone_type' => string '4' (length=1)  
              'extension_number' => string '56431' (length=5)  
              'phone_id' => string '1' (length=1)  
              'phone_number' => string '4008285599' (length=10)  
              'extension_special' => null  
      24 =>   
        array  
          0 =>   
            array  
              'target_id' => string '24' (length=2)  
              'target_type' => string '1' (length=1)  
              'phone_type' => string '1' (length=1)  
              'extension_number' => string '54876' (length=5)  
              'phone_id' => string '1' (length=1)  
              'phone_number' => string '4008285599' (length=10)  
              'extension_special' => string '1' (length=1)  
          1 =>   
            array  
              'target_id' => string '24' (length=2)  
              'target_type' => string '1' (length=1)  
              'phone_type' => string '0' (length=1)  
              'extension_number' => string '96949' (length=5)  
              'phone_id' => string '1' (length=1)  
              'phone_number' => string '4008285599' (length=10)  
              'extension_special' => null  
      25 =>   
        array  
          'target_id' => string '25' (length=2)  
          'target_type' => string '1' (length=1)  
          'phone_type' => string '1' (length=1)  
          'extension_number' => string '07143' (length=5)  
          'phone_id' => string '1' (length=1)  
          'phone_number' => string '4008285599' (length=10)  
          'extension_special' => null  
      26 =>   
        array  
          'target_id' => string '26' (length=2)  
          'target_type' => string '1' (length=1)  
          'phone_type' => string '1' (length=1)  
          'extension_number' => string '94755' (length=5)  
          'phone_id' => string '1' (length=1)  
          'phone_number' => string '4008285599' (length=10)  
          'extension_special' => null  
      30 =>   
        array  
          'target_id' => string '30' (length=2)  
          'target_type' => string '1' (length=1)  
          'phone_type' => string '1' (length=1)  
          'extension_number' => string '14171' (length=5)  
          'phone_id' => string '1' (length=1)  
          'phone_number' => string '4008285599' (length=10)  
          'extension_special' => null  
      36 =>   
        array  
          'target_id' => string '36' (length=2)  
          'target_type' => string '1' (length=1)  
          'phone_type' => string '1' (length=1)  
          'extension_number' => string '54876' (length=5)  
          'phone_id' => string '1' (length=1)  
          'phone_number' => string '4008285599' (length=10)  
          'extension_special' => string '1' (length=1)  
      42 =>   
        array  
          'target_id' => string '42' (length=2)  
          'target_type' => string '1' (length=1)  
          'phone_type' => string '1' (length=1)  
          'extension_number' => string '31354' (length=5)  
          'phone_id' => string '1' (length=1)  
          'phone_number' => string '4008285599' (length=10)  
          'extension_special' => null  
      43 =>   
        array  
          'target_id' => string '43' (length=2)  
          'target_type' => string '1' (length=1)  
          'phone_type' => string '1' (length=1)  
          'extension_number' => string '66810' (length=5)  
          'phone_id' => string '1' (length=1)  
          'phone_number' => string '4008285599' (length=10)  
          'extension_special' => null  
      45 =>   
        array  
          'target_id' => string '45' (length=2)  
          'target_type' => string '1' (length=1)  
          'phone_type' => string '1' (length=1)  
          'extension_number' => string '34868' (length=5)  
          'phone_id' => string '1' (length=1)  
          'phone_number' => string '4008285599' (length=10)  
          'extension_special' => null  
      50 =>   
        array  
          'target_id' => string '50' (length=2)  
          'target_type' => string '1' (length=1)  
          'phone_type' => string '1' (length=1)  
          'extension_number' => string '79523' (length=5)  
          'phone_id' => string '1' (length=1)  
          'phone_number' => string '4008285599' (length=10)  
          'extension_special' => null  
      149 =>   
        array  
          'target_id' => string '149' (length=3)  
          'target_type' => string '1' (length=1)  
          'phone_type' => string '1' (length=1)  
          'extension_number' => string '59438' (length=5)  
          'phone_id' => string '1' (length=1)  
          'phone_number' => string '4008285599' (length=10)  
          'extension_special' => null  
      806 =>   
        array  
          'target_id' => string '806' (length=3)  
          'target_type' => string '1' (length=1)  
          'phone_type' => string '1' (length=1)  
          'extension_number' => string '14780' (length=5)  
          'phone_id' => string '1' (length=1)  
          'phone_number' => string '4008285599' (length=10)  
          'extension_special' => null  
    

      我这样写有些复杂,但是这种需求在网上很难搜到代码,所以自己贴一份,给大家审查下,看看还有什么更简单的方法实现,毕竟我的算法学的还是挺差的。欢迎指点讨论谢谢。

  • 相关阅读:
    myeclipse中jpa的安装以及jpa reverse engining
    myeclipse显示db-brower
    jpa报错 Unable to acquire a connection from driver [null], user [null] and URL [null]
    sqlserver安装和踩坑经历
    idea注释模板
    可选链与空值合并
    Nokia5130不能上网
    血小板 live2d web使用
    什么值得买前端面试题 2019秋季
    便利蜂前端面试题 2019秋季
  • 原文地址:https://www.cnblogs.com/bluealine/p/7477396.html
Copyright © 2011-2022 走看看