PHP合并多维数组
发布时间:2022-12-05 11:25:18 所属栏目:PHP教程 来源:
导读: PHP合并多维数组
phparraysmerge
PHP合并多维数组,php,arrays,multidimensional-array,merge,Php,Arrays,Multidimensional Array,Merge,我有以下3个多维数组:Array([0] => Array([id_produto]
phparraysmerge
PHP合并多维数组,php,arrays,multidimensional-array,merge,Php,Arrays,Multidimensional Array,Merge,我有以下3个多维数组:Array([0] => Array([id_produto]
|
PHP合并多维数组 phparraysmerge PHP合并多维数组,php,arrays,multidimensional-array,merge,Php,Arrays,Multidimensional Array,Merge,我有以下3个多维数组:Array([0] => Array([id_produto] => 191[categoria] => 7[prazo] => 8[desconto] => 45)[1] => Array([id_produto] => 1 我有以下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”和“categoria”键,并有如下内容: 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\u merge$array1、$array2、$array3和array\u merge\u recursive$array1、$array2、$array3,但它确实将它们复制到一个包含9个元素的数组中。以下代码适用于我PHP多维数组,但我正在寻找更快的解决方案,因为我有数千个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次迭代。 首先,为什么您的代码速度慢?假设您有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次迭代。 这可能有用: $merged = array_merge($a, $b, $c); $fixed_merge = Array(); for($i=0; $i < count($merged); $i++){ echo $i; $this_id = $merged[$i]['id_produto']; if(isset($fixed_merge[$this_id])){ $fixed_merge[$this_id] = array_merge($fixed_merge[$this_id], $merged[$i]); }else{ $fixed_merge[$this_id] = $merged[$i]; } } print_r($fixed_merge); 这可能有用: $merged = array_merge($a, $b, $c); $fixed_merge = Array(); for($i=0; $i < count($merged); $i++){ echo $i; $this_id = $merged[$i]['id_produto']; if(isset($fixed_merge[$this_id])){ $fixed_merge[$this_id] = array_merge($fixed_merge[$this_id], $merged[$i]); }else{ $fixed_merge[$this_id] = $merged[$i]; } } print_r($fixed_merge); 使用id_produto为数组设置键,然后只需使用php内置的数组函数,例如 array_replace_recursive($one, $two, $three) 使用id_produto为数组设置键,然后只需使用php内置的数组函数,例如 array_replace_recursive($one, $two, $three) 您确定所有3个阵列的顺序相同吗?同上,显示您尝试过的代码,即使它不起作用!!我编辑了我的问题。正如我在其他问题中所发现的那样,我基本上尝试了应用array_merge,但没有成功。也许还有另一个php函数可以处理这个问题。我可以尝试循环使用它们,但这是我最后的选择。我可以对它们进行排序,但不能保证所有ID都在3个阵列中。您确定所有3个阵列的顺序都相同吗?同上,显示您尝试过的代码,即使它不起作用!!我编辑了我的问题。正如我在其他问题中所发现的那样,我基本上尝试了应用array_merge,但没有成功。也许还有另一个php函数可以处理这个问题。我可以尝试的一件事是循环使用它们,但这是我的最后手段。我可以订购它们,但不能保证所有ID都会在所有3个ArrayShank中找到答案!提醒:您可以将第一个foreach循环替换为array\u列$array2,null,'id\u produto'谢谢您的回答!提醒:您可以用数组\列$array2,null,'id \ u produto'替换第一个foreach循环。谢谢,这是没有for-s或foreach-s的最简单的解决方案,可用于数组大小。此+用于重新设置关键帧=不需要foreach loopsThanks,这是没有for-s或foreach-s的最简单的解决方案,可用于数组大小。 (编辑:PHP编程网 - 钦州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐


浙公网安备 33038102330484号