Join: примеры (PHP)
join(string $separator, array $array): stringФункция join в PHP является псевдонимом implode. Она объединяет элементы массива в строку, используя указанный разделитель.
Используется для преобразования массива в строку. Часто применяется для создания списков, SQL-запросов, путей файлов или параметров URL.
Функция имеет два параметра:
- separator (строка) - Разделитель, который будет вставлен между элементами массива. Необязательный, но рекомендуется всегда указывать.
- array (массив) - Массив, элементы которого нужно объединить.
Синтаксис: join(string $separator, array $array): string или join(array $array): string.
Объединение массива строк:
$array = ['Яблоко', 'Банан', 'Апельсин'];
echo join(', ', $array);Яблоко, Банан, Апельсин
Если передан только массив, элементы объединятся без разделителя:
$array = ['2023', '12', '31'];
echo join($array);20231231
$letters = ['a', 'b', 'c'];
echo join('', $letters);abc
$data = ['Иван', 'ivan@mail.ru', 'Москва'];
echo join(' | ', $data);Иван | ivan@mail.ru | Москва
Функционально идентична join, так как join является её псевдонимом. Выбор между ними - вопрос стиля.
Выполняет обратную операцию - разбивает строку на массив по разделителю. Используется, когда нужно получить массив из строки.
$str = "a,b,c";
print_r(explode(',', $str));Array
(
[0] => a
[1] => b
[2] => c
)Для сложного форматирования, где элементы массива нужно вставить в шаблон.
$values = [25, 'стол'];
echo sprintf('Цена: %d руб. за %s', ...$values);Цена: 25 руб. за стол
Метод строки, принимающий итерируемый объект. В Python разделитель указывается первым.
items = ['Python', 'JS', 'PHP']
result = ', '.join(items)
print(result)Python, JS, PHP
Метод массива, аналогичен PHP, но вызывается как метод массива.
let arr = [1, 2, 3];
console.log(arr.join('-'));1-2-3
Агрегатная функция для объединения значений строк в одной группе.
SELECT GROUP_CONCAT(name SEPARATOR ', ') FROM users;Иван, Мария, Петр
Функция из пакета strings, похожа на Python.
package main
import "strings"
func main() {
elements := []string{"Go", "Rust", "C++"}
result := strings.Join(elements, "/")
println(result)
}Go/Rust/C++
Если передан не массив, будет выведено предупреждение и возвращена пустая строка.
echo join(', ', 'строка');Warning: join(): Argument #2 ($array) must be of type array, string given
Функция не рекурсивна - элементы-массивы будут преобразованы в строку 'Array'.
$array = [['a'], ['b']];
echo join(', ', $array);Array, Array
Все элементы массива преобразуются в строки, что может привести к неожиданным результатам.
$arr = [true, false, null];
echo join(':', $arr);1::
В PHP 8.0 изменён порядок параметров для функции implode (и, соответственно, join). Раньше можно было указывать аргументы в любом порядке, сейчас параметр array должен быть вторым.
// До PHP 8.0 работало, сейчас deprecated
join($array, $separator);В PHP 7.4 устарел вызов с обратным порядком параметров, в PHP 8.0 это вызывает ошибку.
$ids = [10, 20, 30];
$query = "SELECT * FROM users WHERE id IN (" . join(',', $ids) . ")";
echo $query;SELECT * FROM users WHERE id IN (10,20,30)
function deep_join($sep, $array) {
foreach($array as &$value) {
if(is_array($value)) {
$value = deep_join($sep, $value);
}
}
return join($sep, $array);
}
$data = ['a', ['b', 'c'], 'd'];
echo deep_join('-', $data);a-b-c-d
$words = [' php ', ' join ', ' example '];
$trimmed = array_map('trim', $words);
echo join('', $trimmed);phpjoinexample
$items = ['Главная', 'О нас', 'Контакты'];
$li_items = array_map(fn($item) => "<li>$item</li>", $items);
echo "<ul>\n" . join("\n", $li_items) . "\n</ul>";<ul> <li>Главная</li> <li>О нас</li> <li>Контакты</li> </ul>
$numbers = [1, 0, 3, 0, 5];
$filtered = array_filter($numbers);
echo join(', ', $filtered);1, 3, 5
$lines = ['Первая строка', 'Вторая строка', 'Третья строка'];
echo join("\n", $lines);Первая строка Вторая строка Третья строка