implode($separator, $array) nối các giá trị của mảng thành một chuỗi, đặt $separator giữa mỗi cặp phần tử: implode(', ', ['red', 'green', 'blue']) trả về "red, green, blue".
Dấu phân cách chỉ nằm giữa các phần tử, không bao giờ đứng trước phần tử đầu hay sau phần tử cuối. Hàm này làm ngược lại với explode(), hàm tách một chuỗi thành mảng.
Cú pháp
implode(string $separator, array $array): string
implode(array $array): string // separator defaults to ""
Dấu phân cách đứng trước. Code cũ đôi khi truyền mảng trước, implode($array, ', '). Thứ tự đó bị đánh dấu lỗi thời từ PHP 7.4 và bị loại bỏ trong PHP 8.0, nơi nó ném ra TypeError: implode(): Argument #2 ($array) must be of type ?array, string given.
implode và join
join() là tên gọi khác của implode(). Hai hàm nhận cùng đối số và trả về cùng một chuỗi, nên bạn chỉ cần chọn một và dùng nhất quán.
Số, boolean và null được xử lý ra sao
Mọi giá trị đều được chuyển thành chuỗi trước. Số được in ra như bạn mong đợi, true thành "1", còn false và null thành chuỗi rỗng, khiến hai dấu phân cách đứng liền nhau.
Implode một mảng kết hợp
implode() bỏ qua khóa và chỉ nối các giá trị. Để có các cặp key=value, hãy tạo từng phần bằng array_map() trên khóa và giá trị, rồi nối lại. http_build_query() làm điều tương tự cho chuỗi query của URL và còn mã hóa khoảng trắng cùng ký tự đặc biệt.
Cũng cách đó, bạn có thể chỉ nối các khóa: implode(', ', array_keys($user)). Xem thêm về khóa và giá trị ở trang mảng kết hợp.
Nối bằng ký tự xuống dòng hoặc tạo danh sách HTML
Dấu phân cách có thể là bất kỳ chuỗi nào. "\n" (trong dấu ngoặc kép) đặt mỗi giá trị trên một dòng riêng, rất tiện cho tệp văn bản và đầu ra dòng lệnh. Khi dùng thẻ HTML làm dấu phân cách, implode() tạo ra một danh sách chỉ với một dòng code. Chạy khối tiếp theo và tab Trang sẽ hiển thị danh sách đã được render.
Thoát (escape) từng giá trị bằng htmlspecialchars() trước khi nối sẽ ngăn một giá trị như <b> biến thành mã HTML.
Nối với chữ "and" trước phần tử cuối
Một danh sách dễ đọc với con người thường cần chữ "and" (và) trước phần tử cuối cùng. Lấy phần tử cuối ra, nối phần còn lại, rồi thêm nó trở lại:
Lỗi thường gặp: mảng lồng nhau
implode() chỉ làm việc trên một cấp. Phần tử nào bản thân là một mảng sẽ bị chuyển thành chữ Array, và PHP in ra một cảnh báo:
<?php
echo implode(', ', ['red', ['orange', 'yellow']]);
Warning: Array to string conversion in /home/index.php on line 2
red, Array
Hãy làm phẳng các mảng con trước, hoặc nối từng mảng riêng:
Câu hỏi thường gặp
Hàm implode() trong PHP dùng để làm gì?
Hàm này nối các giá trị của mảng thành một chuỗi, đặt dấu phân cách giữa chúng: implode(', ', ['a', 'b', 'c']) trả về "a, b, c". Nó làm ngược lại với explode().
implode() và join() khác nhau thế nào?
Không khác gì cả. join() là tên gọi khác (alias) của implode(): cùng đối số, cùng kết quả. implode() là tên bạn sẽ gặp trong phần lớn code.
Làm sao implode một mảng kết hợp kèm cả khóa?
implode() chỉ dùng giá trị. Để có cả khóa, hãy tạo từng phần trước: implode(', ', array_map(fn($k, $v) => "$k=$v", array_keys($a), $a)). Với chuỗi query của URL, http_build_query($a) làm việc này chỉ trong một lệnh gọi.
Vì sao implode() báo TypeError trong PHP 8?
Vì các đối số đang theo thứ tự cũ. implode($array, ', ') bị đánh dấu lỗi thời từ PHP 7.4 và bị loại bỏ trong PHP 8.0. Hãy viết dấu phân cách trước: implode(', ', $array).
Làm sao chuyển mảng thành chuỗi phân cách bằng dấu phẩy trong PHP?
implode(',', $array). Dùng ', ' làm dấu phân cách nếu bạn muốn có khoảng trắng sau mỗi dấu phẩy. Với tệp CSV, hãy dùng fputcsv(), hàm này còn tự đặt trong dấu ngoặc kép những giá trị có chứa dấu phẩy.