加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 钦州站长网 (https://www.0777zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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]
  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编程网 - 钦州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!