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.
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
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!