10

私は 2 つの * をarray持っmergeていNULL rowsます。

$a = array(
    'a' => NULL,
    'b' => 1,
    'c' => 1
);

$b = array(
    'a' => 1,
    'b' => NULL,
    'c' => 1    
);

したがって、コード:

$c = array_merge($a,$b);

$c を与える:

array {
  'a'=> 1
  'b'=> NULL
  'c'=>1
}

($a,$b)次のようなマージンを作成する簡単な方法はあります$a$b? インデックスが$b$a インデックスの場合、上書きしたい- 例では、から上書きする必要があります$bnull$b['b']$a

可能であれば、すべての NULL 行を埋める必要があります。

4

5 に答える 5

20

array_filter関数を使用して両方の配列の null 値を削除し、それらをマージできると思います

$a = array(
    'a' => NULL,
    'b' => 1,
    'c' => 1
);

$b = array(
    'a' => 1,
    'b' => NULL,
    'c' => 1    
);

$b  = array_filter($b);
$a  = array_filter($a);
$c = array_merge($a, $b);
var_dump($c);

これは出力されます

array(3) {
  ["b"]=> int(1)
  ["c"]=> int(1)
  ["a"]=> int(1)
}

ライブサンプル

補足として、2番目のパラメーターなしで使用すると、配列などと同様にarray_filterすべての値が削除されることを追加します。値のみを削除する場合は、使用する必要がありますNULLEMPTYNULLarray_filter($yourarray, 'strlen');

編集済み

両方の配列に同じキーがあり、両方の配列に同じ数のキー/値があると仮定して保持したい場合は、配列内でループし、必要な場所をNULL保持する新しい配列を作成する必要がありますNULL

$a = array(
    'a' => NULL,
    'b' => 1,
    'c' => 1,
    'd' => NULL
);

$b = array(
    'a' => 1,
    'b' => NULL,
    'c' => 1,   
    'd' => NULL,
);

$c = array();
foreach($a as $key => $val)
{
    if($key == NULL && $b[$key] == NULL)
    {
        $c[$key] = $val;
    } else if($key != NULL && $b[$key] == NULL) {
        $c[$key]= $val;
    } else if($key != NULL && $b[$key] != NULL) {
        $c[$key]= $b[$key];
    } else {
        $c[$key]= $b[$key];
    }
}
var_dump($c);

これは出力されます

array (size=4)
  'a' => int 1
  'b' => int 1
  'c' => int 1
  'd' => NULL

ライブサンプル

于 2013-06-03T06:59:45.317 に答える
0

次に、最初のパラメーターとして $b を渡す必要があります

$c = array_merge($b,$a);

この機能を使用できます

function mergeArray($array1, $array2)
{
    $result = array();

    foreach ($array1 as $key=>$value)
    {
        $result[$key] = $value;
    }

    foreach ($array2 as $key=>$value)
    {
        if (!isset($result[$key] || $result[$key] == null)
        {
            $result[$key] = $value;
        }
    }

    return $result;
}
于 2013-06-03T06:56:09.867 に答える
0

両方の配列に NULL の値を持つキーを保持する必要がある場合は、最初の配列に対応する非 NULL エントリがある場合 (およびその場合にのみ)、2 番目の配列からそれらのエントリを無視するカスタム関数を使用できます。次のようになります。

function arrayMergeIgnoringNull($arr1, $arr2) {
    $new2 = array();
    forEach ($arr2 as $key => $value) {
        if (($value !== NULL) || !isSet($arr1[$key])) {
           $new2[$key] = $value;
        } 
    }
    return array_merge($arr1, $new2);
}
$c = arrayMergeIgnoringNull($a, $b);

この短いデモも参照してください。

于 2013-06-03T07:11:31.557 に答える