implode($separator, $array) склеивает значения массива в одну строку, ставя $separator между каждой парой: implode(', ', ['red', 'green', 'blue']) возвращает "red, green, blue".
Разделитель ставится только между элементами, никогда перед первым или после последнего. Это обратная операция для explode(), которая разбивает строку на массив.
Синтаксис
implode(string $separator, array $array): string
implode(array $array): string // separator defaults to ""
Разделитель идёт первым. Старый код иногда передавал массив первым, implode($array, ', '). Такой порядок объявили устаревшим в PHP 7.4 и удалили в PHP 8.0, где он выбрасывает TypeError: implode(): Argument #2 ($array) must be of type ?array, string given.
implode и join
join() это псевдоним implode(). Они принимают одинаковые аргументы и возвращают одинаковую строку, так что выберите одну и придерживайтесь её.
Что происходит с числами, логическими значениями и null
Каждое значение сначала приводится к строке. Числа выводятся так, как вы ожидаете, true становится "1", а false и null становятся пустыми строками, из-за чего два разделителя оказываются подряд.
implode для ассоциативного массива
implode() игнорирует ключи и склеивает только значения. Чтобы получить пары key=value, соберите каждую часть через array_map() по ключам и значениям, а потом склейте. http_build_query() делает то же для строки запроса URL и ещё кодирует пробелы и спецсимволы.
По той же схеме склеиваются только ключи: implode(', ', array_keys($user)). Подробнее о ключах и значениях на странице про ассоциативные массивы.
Склейка через перенос строки или HTML-список
Разделителем может быть любая строка. "\n" (в двойных кавычках) ставит каждое значение на отдельную строку, что удобно для текстовых файлов и вывода в командной строке. С HTML-тегами в качестве разделителя implode() собирает список одной строкой. Запустите следующий блок, и вкладка Page покажет готовый список.
Экранирование каждого значения через htmlspecialchars() перед склейкой не даёт значению вроде <b> превратиться в разметку.
Склейка с "и" перед последним элементом
Человекочитаемому списку обычно нужно "и" перед последним элементом. Снимите его с конца, склейте остальное и добавьте обратно:
Частая ошибка: вложенные массивы
implode() работает с одним уровнем. Элемент, который сам является массивом, превращается в слово Array, а PHP печатает предупреждение:
<?php
echo implode(', ', ['red', ['orange', 'yellow']]);
Warning: Array to string conversion in /home/index.php on line 2
red, Array
Сначала сделайте вложенные массивы плоскими или склейте каждый по отдельности:
Часто задаваемые вопросы
Что делает implode() в PHP?
Склеивает значения массива в одну строку, ставя между ними разделитель: implode(', ', ['a', 'b', 'c']) возвращает "a, b, c". Это противоположность explode().
Чем implode() отличается от join()?
Ничем. join() это псевдоним implode(): те же аргументы, тот же результат. В большей части кода встречается имя implode().
Как склеить ассоциативный массив вместе с ключами?
implode() использует только значения. Чтобы включить ключи, сначала соберите части: implode(', ', array_map(fn($k, $v) => "$k=$v", array_keys($a), $a)). Для строки запроса URL http_build_query($a) делает это одним вызовом.
Почему implode() выдаёт TypeError в PHP 8?
Потому что аргументы стоят в старом порядке. implode($array, ', ') объявили устаревшим в PHP 7.4 и удалили в PHP 8.0. Пишите разделитель первым: implode(', ', $array).
Как превратить массив в строку через запятую в PHP?
implode(',', $array). Используйте разделитель ', ', если после каждой запятой нужен пробел. Для CSV-файла используйте fputcsv(), она ещё и берёт в кавычки значения с запятыми.