ホームページ  >  記事  >  バックエンド開発  >  PHP 配列をマージした後に空の配列を処理するにはどうすればよいですか?

PHP 配列をマージした後に空の配列を処理するにはどうすればよいですか?

WBOY
WBOYオリジナル
2024-04-28 13:51:01655ブラウズ

PHP で array_merge() を使用して配列をマージする場合、空の文字列または空の配列が含まれると、混乱を招く結果が生じます。解決策: 1. array_filter() を使用して null 値をフィルタリングします。 2. 空の配列を含む場合は、再帰マージ関数 array_merge_recursive_distinct() を使用して、一貫した配列構造を維持します。

PHP 配列をマージした後に空の配列を処理するにはどうすればよいですか?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。