Apabila menggabungkan tatasusunan menggunakan array_merge() dalam PHP, mengandungi rentetan kosong atau tatasusunan kosong akan menghasilkan hasil yang mengelirukan. Penyelesaian: 1. Gunakan array_filter() untuk menapis nilai nol. 2. Untuk kes yang mengandungi tatasusunan kosong, gunakan fungsi cantum rekursif array_merge_recursive_distinct() untuk mengekalkan struktur tatasusunan yang konsisten.
Array bercantum apabila berurusan dengan tatasusunan kosong dalam PHP
Dalam PHP, apabila menggunakan fungsi array_merge()
untuk menggabungkan tatasusunan, jika satu atau lebih tatasusunan mengandungi elemen kosong, akhirnya Keputusan boleh mengelirukan. 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()
untuk menapis nilai null 🎜🎜🎜Untuk mengalih keluar nilai null sebelum digabungkan, anda boleh menggunakan fungsi array_filter()
: 🎜rrreee🎜Output: 🎜rrreee🎜Rentetan kosong telah ditapis dan tatasusunan yang digabungkan tidak mengandungi nilai nol. 🎜🎜🎜Kes 2: Penggabungan Tatasusunan Mengandungi Tatasusunan Kosong 🎜🎜🎜Jika tatasusunan mengandungi tatasusunan kosong, pencantuman mungkin secara tidak dijangka menghasilkan tatasusunan berbilang dimensi: 🎜rrreee🎜Keluaran: 🎜menggabungkan tatasusunan🎜Menjadikan tatasusunan kosong , menyebabkan hasilnya menjadi tatasusunan berbilang dimensi. . NULL, struktur tatasusunan yang digabungkan kekal konsisten. 🎜Atas ialah kandungan terperinci Bagaimana untuk menangani tatasusunan kosong selepas menggabungkan tatasusunan PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!