Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menangani tatasusunan kosong selepas menggabungkan tatasusunan PHP?

Bagaimana untuk menangani tatasusunan kosong selepas menggabungkan tatasusunan PHP?

WBOY
WBOYasal
2024-04-28 13:51:01584semak imbas

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.

Bagaimana untuk menangani tatasusunan kosong selepas menggabungkan tatasusunan PHP?

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

🎜Kes 1: Penggabungan tatasusunan yang mengandungi rentetan kosong🎜🎜rrreee🎜Output: 🎜rrreee🎜Seperti yang anda lihat, rentetan kosong dikekalkan dalam tatasusunan yang digabungkan. 🎜🎜🎜Penyelesaian: Gunakan 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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn