Maison  >  Article  >  développement back-end  >  Comment gérer les tableaux vides après la fusion des tableaux PHP ?

Comment gérer les tableaux vides après la fusion des tableaux PHP ?

WBOY
WBOYoriginal
2024-04-28 13:51:01588parcourir

Lors de la fusion de tableaux à l'aide de array_merge() en PHP, contenir des chaînes vides ou des tableaux vides produira des résultats déroutants. Solution : 1. Utilisez array_filter() pour filtrer les valeurs nulles. 2. Pour les cas contenant des tableaux vides, utilisez la fonction de fusion récursive array_merge_recursive_distinct() pour conserver une structure de tableau cohérente.

Comment gérer les tableaux vides après la fusion des tableaux PHP ?

Fusion de tableaux lorsqu'il s'agit de tableaux vides en PHP

En PHP, lors de l'utilisation de la fonction array_merge() pour fusionner des tableaux, si un ou plusieurs tableaux contiennent des éléments vides, finalement, les résultats peuvent prêter à confusion. 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

🎜Cas 1 : Fusion de tableaux contenant des chaînes vides🎜🎜rrreee🎜Sortie : 🎜rrreee🎜Comme vous pouvez le voir, les chaînes vides sont conservées dans le tableau fusionné. 🎜🎜🎜Solution : utilisez array_filter() pour filtrer les valeurs nulles 🎜🎜🎜Pour supprimer les valeurs nulles avant la fusion, vous pouvez utiliser la fonction array_filter() : 🎜rrreee🎜Sortie : 🎜rrreee🎜Les chaînes vides ont été filtrées et le tableau fusionné ne contient pas de valeurs nulles. 🎜🎜🎜Cas 2 : Fusion de tableaux contenant des tableaux vides 🎜🎜🎜Si les tableaux contiennent des tableaux vides, la fusion peut aboutir de manière inattendue à un tableau multidimensionnel : 🎜rrreee🎜Sortie : 🎜rrreee🎜Les tableaux vides constituent le tableau fusionné. Un élément , ce qui donne au résultat un tableau multidimensionnel. 🎜🎜🎜Solution : Utiliser la fusion récursive🎜🎜🎜Pour résoudre ce problème, vous pouvez utiliser la méthode de fusion récursive, qui fusionne les tableaux vides en tant qu'éléments normaux : 🎜rrreee🎜Sortie : 🎜rrreee🎜Le tableau vide a été converti en NULL, la structure du tableau fusionné reste cohérente. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn