Heim  >  Artikel  >  Backend-Entwicklung  >  Wie gehe ich mit leeren Arrays um, nachdem PHP-Arrays zusammengeführt wurden?

Wie gehe ich mit leeren Arrays um, nachdem PHP-Arrays zusammengeführt wurden?

WBOY
WBOYOriginal
2024-04-28 13:51:01584Durchsuche

Beim Zusammenführen von Arrays mit array_merge() in PHP führen leere Zeichenfolgen oder leere Arrays zu verwirrenden Ergebnissen. Lösung: 1. Verwenden Sie array_filter(), um Nullwerte zu filtern. 2. Verwenden Sie für Fälle, die leere Arrays enthalten, die rekursive Zusammenführungsfunktion array_merge_recursive_distinct(), um eine konsistente Array-Struktur aufrechtzuerhalten.

Wie gehe ich mit leeren Arrays um, nachdem PHP-Arrays zusammengeführt wurden?

Array-Zusammenführung beim Umgang mit leeren Arrays in PHP

Wenn in PHP die Funktion array_merge() zum Zusammenführen von Arrays verwendet wird und eines oder mehrere der Arrays leere Elemente enthalten, Schließlich können die Ergebnisse verwirrend sein. 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

🎜Fall 1: Zusammenführung von Arrays mit leeren Strings🎜🎜rrreee🎜Ausgabe: 🎜rrreee🎜Wie Sie sehen können, bleiben die leeren Strings im zusammengeführten Array erhalten. 🎜🎜🎜Lösung: Verwenden Sie array_filter(), um Nullwerte zu filtern. 🎜🎜🎜Um Nullwerte vor dem Zusammenführen zu entfernen, können Sie die Funktion array_filter() verwenden: 🎜rrreee🎜Ausgabe: 🎜rrreee🎜Leere Zeichenfolgen wurden gefiltert und das zusammengeführte Array enthält keine Nullwerte. 🎜🎜🎜Fall 2: Zusammenführen von Arrays, die leere Arrays enthalten 🎜🎜🎜Wenn die Arrays leere Arrays enthalten, kann die Zusammenführung unerwartet zu einem mehrdimensionalen Array führen: 🎜rrreee🎜Ausgabe: 🎜rrreee🎜Die leeren Arrays bilden ein Element des zusammengeführten Arrays , wodurch das Ergebnis ein mehrdimensionales Array ist. 🎜🎜🎜Lösung: Rekursive Zusammenführung verwenden🎜🎜🎜Um dieses Problem zu lösen, können Sie die rekursive Zusammenführungsmethode verwenden, die leere Arrays als normale Elemente zusammenführt: 🎜rrreee🎜Ausgabe: 🎜rrreee🎜Das leere Array wurde in konvertiert NULL, die zusammengeführte Array-Struktur bleibt konsistent. 🎜

Das obige ist der detaillierte Inhalt vonWie gehe ich mit leeren Arrays um, nachdem PHP-Arrays zusammengeführt wurden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn