PHP で array_merge() を使用して配列をマージする場合、空の文字列または空の配列が含まれると、混乱を招く結果が生じます。解決策: 1. array_filter() を使用して null 値をフィルタリングします。 2. 空の配列を含む場合は、再帰マージ関数 array_merge_recursive_distinct() を使用して、一貫した配列構造を維持します。
PHP で空の配列を扱う場合の配列のマージ
PHP では、array_merge()
を使用します。この関数は配列をマージしますが、1 つ以上の配列に空の要素が含まれている場合、最終結果が混乱する可能性があります。
ケース 1: 空の文字列を含む配列のマージ
$arr1 = [1, 2, 3]; $arr2 = [4, 5, '']; $merged = array_merge($arr1, $arr2); var_dump($merged);
出力:
array(6) { [0] => int(1) [1] => int(2) [2] => int(3) [3] => int(4) [4] => int(5) [5] => string(0) "" }
ご覧のとおり、マージでは空の文字列が保持されます。後続の配列。
解決策: array_filter()
を使用して null 値をフィルタリングします
マージ前に null 値を削除するには、array_filter を使用します。 ()
関数:
$arr1 = [1, 2, 3]; $arr2 = [4, 5, '']; $arr1 = array_filter($arr1); $arr2 = array_filter($arr2); $merged = array_merge($arr1, $arr2); var_dump($merged);
出力:
array(5) { [0] => int(1) [1] => int(2) [2] => int(3) [3] => int(4) [4] => int(5) }
空の文字列はフィルタリングされており、マージされた配列には空の値は含まれません。
ケース 2: 空の配列を含む配列のマージ
配列に空の配列が含まれる場合、マージ後に予期せず多次元配列が生成される可能性があります:
$arr1 = [1, 2, 3]; $arr2 = [4, 5, []]; $merged = array_merge($arr1, $arr2); var_dump($merged);
出力:
array(6) { [0] => int(1) [1] => int(2) [2] => int(3) [3] => int(4) [4] => int(5) [5] => array(0) { } }
空の配列はマージされた配列内の 1 つの要素を構成し、結果は多次元配列になります。
解決策: 再帰的マージを使用する
この問題を解決するには、空の配列を通常のマージ要素として扱う再帰的マージ方法を使用できます。
function array_merge_recursive_distinct(array &$array1, array &$array2) { $merged = $array1; foreach ($array2 as $key => &$value) { if (is_array($value) && isset($merged[$key]) && is_array($merged[$key])) { $merged[$key] = array_merge_recursive_distinct($merged[$key], $value); } else { $merged[$key] = $value; } } return $merged; } $arr1 = [1, 2, 3]; $arr2 = [4, 5, []]; $merged = array_merge_recursive_distinct($arr1, $arr2); var_dump($merged);
出力:
array(6) { [0] => int(1) [1] => int(2) [2] => int(3) [3] => int(4) [4] => int(5) [5] => NULL }
空の配列は NULL
に変換され、マージされた配列構造は一貫性を保ちます。
以上がPHP 配列をマージした後に空の配列を処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。