PHPの

2016-09-21 3 views
0

の2次元配列を長時間マージすると、非常に単純な問題のように見えるスムースを解決できません...私は2次元配列をマージします。 例: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] = 
    { 

    } 
} 

私はそのようsometihngを試してみてください。

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

しかし、$ arr2が空の場合はうまくいかない:(

+0

if $ arr2が空の場合はどういう意味ですか? 2番目の配列を持たない場合にマージする理由 – jitendrapurohit

答えて

1

おそらくこのようなもの

二番目の配列は、チェックのために
$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]; 
      } 
     } 
+1

Arg、あなたの権利 - 私は今それを持っていると思う - 少し手に余るf5ボタンなし! –

+0

あなたがどこに行くか確認してください。ok –

+0

Okですが、最初の配列が空の場合はどうなりますか?私はいつも、例のような構造体を配列にしたいとします –

1

、あなたはどちらかの配列が設定されたりしませ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()いくつかのことを使用することができますよりも、同じインデックスの両方をマージしたいF:

<?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 
     ) 

) 

イストスクリプト、その、あなたのようになり、あなたを与えるだろうユニークなインデックスが必要です。 2番目のスクリプトは、すべての値を1つの配列に渡します。