在PHP中合并二维数组



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

$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为空则不起作用:(

对于第二个数组检查,您需要使用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脚本将为您提供您需要的唯一索引结果。第二个脚本将把所有值放在一个数组中。

可能是这样的

 $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]; 
          }
       }

最新更新