繁体   English   中英

在PHP中合并二维数组

[英]Merge two dimensional array in PHP

很长一段时间都无法解决看起来很简单的问题……我想合并一个二维数组。 这个例子:

$arr1 = {
  [532] =
  {
    [0] = "11"
    [1] = "12"
  }
  [273] =
  {
    [0] = "99"
  }
}
$arr2 = {
  [532] =
  {
    [0] = "11"
    [1] = "13"
  }
}

合并的结果应该是,与该数组完全相同的通用键上的映射:

$result = {
  [532] =
  {
     [0] =
     {      
        [0] = "11"
        [1] = "12"
     }
     [1] =
     {
        [0] = "11"
        [1] = "13"
     }
  }
  [273]
     [0] =
     {      
        [0] = "99"
     }
     [1] =
     {

     }
}

我这样尝试:

    $result = $arr1;
    foreach ($arr2 as $key => $value) {
        $result[$key] = isset($result[$key]) ? array_merge([$result[$key]], [$value]) : [$value];
    }

但是如果$ arr2为空:(

大概是这样的

 $arr1 = {
      [532] =
      {
        [0] = "11"
        [1] = "12"
      }
      [273] =
      {
        [0] = "99"
      }
    }
    $arr2 = {
      [532] =
      {
        [0] = "11"
        [1] = "13"
      }
    }

   $newarray = array();
   foreach ($arr1 as $key => $value) {
      $cu = $arr1[$key];

      $newarray[$key][] = $cu;

      if(!isset($arr2[$key])) {
            $newarray[$key][] = array();
       }
       else {
         $newarray[$key][] = $arr2[$key];
       }
   }

foreach ($arr2 as $key => $value) {
          if(!isset($newarray[$key])) {
             $newarray[$key][] = $arr2[$key]; 
          }
       }

对于第二个数组检查,您需要使用或不使用数组集的isset()

例:

<?php
$arr1 = array('532'=>array('11','12'),'273'=>array('99'));
$arr2 = array('532'=>array('11','13'));

$newArr = array();
foreach ($arr1 as $key => $value) {
   if(isset($arr2[$key])){
      $newArr[$key][] = $value;
      $newArr[$key][] = $arr2[$key];
   }
   else{
      $newArr[$key] = $value;
   }
}
echo "<pre>";
print_r($newArr);
?>

结果:

Array
(
    [532] => Array
        (
            [0] => Array
                (
                    [0] => 11
                    [1] => 12
                )

            [1] => Array
                (
                    [0] => 11
                    [1] => 13
                )

        )

    [273] => Array
        (
            [0] => 99
        )

)

此外,如果要合并两个相同的索引,则可以使用array_merge()这样的东西:

<?php
$arr1 = array('532'=>array('11','12'),'273'=>array('99'));
$arr2 = array('532'=>array('11','13'));

$newArr = array();
foreach ($arr1 as $key => $value) {
   if(isset($arr2[$key])){
      $newArr[$key][] = array_merge($value,$arr2[$key]);      
   }
   else{
      $newArr[$key] = $value;
   }
}
echo "<pre>";
print_r($newArr);
?>

结果:

Array
(
    [532] => Array
        (
            [0] => Array
                (
                    [0] => 11
                    [1] => 12
                    [2] => 11
                    [3] => 13
                )

        )

    [273] => Array
        (
            [0] => 99
        )

)

请注意, ist script会根据需要为您提供唯一索引的结果。 第二个脚本将在一个数组中为您提供所有值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM