首頁  >  文章  >  後端開發  >  PHP數組合併後,如何處理空數組?

PHP數組合併後,如何處理空數組?

WBOY
WBOY原創
2024-04-28 13:51:01584瀏覽

PHP 中使用 array_merge() 合併陣列時,如果包含空字串或空數組,會產生令人困惑的結果。解決方案:1. 使用 array_filter() 過濾空值。 2. 對於包含空數組的情況,使用遞歸合併函數 array_merge_recursive_distinct() 來保持一致的陣列結構。

PHP數組合併後,如何處理空數組?

PHP 中處理空數組時的數字組合並

在PHP 中,使用array_merge()函數合併陣列時,如果其中一個或多個陣列包含空元素,最終結果可能會令人困惑。

案例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() 過濾空值

要在合併前移除空值,可以使用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) {
  }
}

空數組構成了合併後的陣列中的一個元素,導致結果為多維數組。

解決方案:使用遞歸合併

要解決此問題,可以使用遞歸合併方法,該方法將空數組視為普通元素進行合併:

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn