Merge multiple multidimensional arrays and group by id column(合并多个多维数组并按id列分组)
                            本文介绍了合并多个多维数组并按id列分组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
                        
                        问题描述
我有以下3个多维数组:
Array
(
    [0] => Array
        (
            [id_produto] => 191
            [categoria] => 7
            [prazo] => 8
            [desconto] => 45
        )
    [1] => Array
        (
            [id_produto] => 194
            [categoria] => 7
            [prazo] => 8
            [desconto] => 39
        )
    [2] => Array
        (
            [id_produto] => 195
            [categoria] => 7
            [prazo] => 8
            [desconto] => 39
        )
Array
(
    [0] => Array
        (
            [id_produto] => 191
            [categoria] => 7
            [pageviews] => 2103
        )
    [1] => Array
        (
            [id_produto] => 194
            [categoria] => 7
            [pageviews] => 2445
        )
    [2] => Array
        (
            [id_produto] => 195
            [categoria] => 7
            [pageviews] => 1560
        )
Array
(
    [0] => Array
        (
            [id_produto] => 191
            [categoria] => 7
            [pedidos] => 3
            [valor] => 6501.583023
        )
    [1] => Array
        (
            [id_produto] => 194
            [categoria] => 7
            [pedidos] => 1
            [valor] => 2217.968420
        )
    [2] => Array
        (
            [id_produto] => 197
            [categoria] => 7
            [pedidos] => 2
            [valor] => 4405.517706
        )
我想将它们组合在一起,保留关键字‘id_produto’和‘categia’,并具有如下内容:
Array
(
    [0] => Array
        (
            [id_produto] => 191
            [categoria] => 7
            [prazo] => 8
            [desconto] => 45
            [pageviews] => 2103
            [pedidos] => 3
            [valor] => 6501.583023
        )
    [1] => Array
        (
            [id_produto] => 194
            [categoria] => 7
            [prazo] => 8
            [desconto] => 39
            [pageviews] => 2445
            [pedidos] => 1
            [valor] => 2217.968420
        )
    [2] => Array
        (
            [id_produto] => 195
            [categoria] => 7
            [prazo] => 8
            [desconto] => 39
            [pageviews] => 1560
            [pedidos] => 2
            [valor] => 4405.517706
        )
我尝试了array_merge($array1,$array2,$array3)和array_merge_recursive($array1,$array2,$array3),但它确实将它们复制到包含9个元素的数组中。以下代码适用于我,但我正在寻找更快的解决方案,因为我有数千个ID:
foreach($array1 as $arr1=>$a){
    foreach($array2 as $arr2=>$b){
        if($a['id_produto'] == $b['id_produto']){
            $array1[$arr1]['pageviews'] = $b['pageviews'];
        }
    }
    foreach($array3 as $arr3=>$c){
        if($a['id_produto'] == $c['id_produto']){
            $array1[$arr1]['pedidos'] = $c['pedidos'];
            $array1[$arr1]['valor'] = $c['valor'];
        }
    }
}
推荐答案
首先,为什么您的代码很慢?假设您有1000个元素,您的代码将进行1000*(1000+1000)=200万次迭代。这就是为什么。
如何使其更快?使用ASSOC数组而不是普通数组,即使用id_produto作为键,这样您就可以直接访问正确的元素,而不必在循环内执行循环。
为此,首先转换array2和array3。array2示例:
$new_array2 = array();
foreach ( $array2 as $row ) {
    $new_array2[$row['id_produto']] = $row;
}
$array2 = $new_array2;
然后合并:
foreach ( $array1 as & $row ) {
    $row['pageviews'] = $array2[$row['id_produto']['pageviews']];
    $row['pedidos'] = $array3[$row['id_produto']['pedidos']];
    $row['valor'] = $array3[$row['id_produto']['valor']];
}
总计:仅3000次迭代。
这篇关于合并多个多维数组并按id列分组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
				 沃梦达教程
				
			本文标题为:合并多个多维数组并按id列分组
 
				
         
 
            
        基础教程推荐
             猜你喜欢
        
	     - 如何在数学上评估像“2-1"这样的字符串?产生“1"? 2022-01-01
- Yii2 - 在运行时设置邮件传输参数 2022-01-01
- PHPUnit 的 Selenium 2 文档到底在哪里? 2022-01-01
- 主题化 Drupal 7 的 Ubercart “/cart"页 2021-01-01
- 使用 scandir() 在目录中查找文件夹 (PHP) 2022-01-01
- Web 服务器如何处理请求? 2021-01-01
- php中的foreach复选框POST 2021-01-01
- php 7.4 在写入变量中的 Twig 问题 2022-01-01
- 将变量从树枝传递给 js 2022-01-01
- php中的PDF导出 2022-01-01
 
    	 
    	 
    	 
    	 
    	 
    	 
    	 
    	 
				 
				 
				 
				