Слияние массивов. Преобразование массива в строку
Слияние массивов
Достаточно частой задачей при работе с массивами является соединение двух массивов в один. Это называется "слияние".
Для технической реализации этого момента над понадобится функция array_merge():
$garden = array_merge($fruits, $vegetables);
Детали
Функция array_merge() работает как с заранее определенными массивами, так и с массивами, определяемыми по ходу работы при помощи array():
$p_languages = array('Perl', 'PHP'); $p_languages = array_merge($p_languages, array('Python')); print_r($p_languages); Array ( [0] => Perl [1] => PHP [2] => Python )
Следовательно, объединяемые массивы могут быть как уже существующими (как в случае с $p_languages), так и анонимными (как array('Python')).
Использовать array_push() не удастся, потому что PHP не производит автоматического преобразования массива в серию независимых переменных, и на выходе мы получим вложенный массив:
array_push($p_languages, array('Python')); print_r($p_languages); Array ( [0] => Perl [1] => PHP [2] => Array ( [0] => Python ) )
При слиянии массивов, содержащих только числовые ключи, происходит перенумерация массивов, поэтому значения не теряются.
Если же идет слияние массивов со строковыми ключами, то значения из второго массива заменяют значения с одинаковыми ключами.
Ну а для массивов с обоими типами ключей реализуются оба типа поведения. Например:
$lc = array('a', 'b' => 'b'); // Значения - буквы нижнего регистра $uc = array('A', 'b' => 'B'); // Значения - буквы верхнего регистра $ac = array_merge($lc, $uc); // Все регистры? print_r($ac); Array ( [0] => a [b] => B [1] => A )
Что получилось в итоге?
Буква A (в верхнем регистре) была размещена под индексом 1 вместо 0 для предотвращения коллизии и присоединена в конце итогового массива. Буква же B (в верхнем регистре) заменила букву b в нижнем регистре на ее исходном месте в массиве.
Обратите внимание, что для слияния массивов также может использоваться оператор +. Для ключей с одинаковыми именами, присутствующих в обоих массивах, используется значение из левого операнда. Переупорядочение для предотвращения коллизий при этом не выполняется.
— Регулярная проверка качества ссылок по более чем 100 показателям и ежедневный пересчет показателей качества проекта.
— Все известные форматы ссылок: арендные ссылки, вечные ссылки, публикации (упоминания, мнения, отзывы, статьи, пресс-релизы).
— SeoHammer покажет, где рост или падение, а также запросы, на которые нужно обратить внимание.
SeoHammer еще предоставляет технологию Буст, она ускоряет продвижение в десятки раз, а первые результаты появляются уже в течение первых 7 дней. Зарегистрироваться и Начать продвижение
print_r($uc + $lc); print_r($lc + $uc); Array ( [0] => A [b] => B ) Array ( [0] => a [b] => b )
Так как оба значения, a и A, имеют ключ 0, а значения b и B имеют ключ b, в итоге в объединенных массивах остаются только два элемента.
В первом случае результат $a+$b представляет собой $b, а во втором результат $b+$a представляет собой $a.
Впрочем, для двух массивов с разными ключами проблем не будет, а новый массив будет содержать объединение двух массивов.
Это был необходимый минимум для понимания того, как происходит объединение массивов.
Рассмотрим кратко еще одну операцию.
Преобразование массива в строку
Пусть перед нами стоит задача "вырвать" элементы массива и выстроить в виде некой отформатированной строки.
В этом нам поможет функция join():
// Построение списка, разделенного запятыми $string = join(',', $array); Другой вариант - сформировать необходимую строку в цикле: $string = ''; foreach ($array as $key => $value) { $string .= ",$value"; } $string = substr($string, 1); // Удаление "," в начале
Детали
Если для ваших нужд решение с функцией join() срабатывает, я рекомендую остановиться именно на нем, ведь этот вариант работает быстрее любого решения на базе PHP-цикла.
И все бы ничего, но функции join() порой не хватает гибкости.
Прежде всего, она вставляет ограничители только между элементами, а не заключает элементы в них. Чтобы заключить элементы, например, в HTML-теги <b> и разделить их запятыми, придется немного поплясать с бубном))
$left = '<b>'; $right = '</b>'; $html = $left . join("$right,$left", $html) . $right;
Кроме того, join() не различает значения. Если вы хотите включить подмножество элементов, цикл придется проводить самостоятельно:
$string = ''; foreach ($fields as $key => $value) { // Пароль не включается if ('password' != $key) { $string .= ",<b>$value</b>"; } } $string = substr($string, 1); // Удаление "," в начале
Обратите внимание: разделитель всегда добавляется к каждому значению, а затем отсекается за пределами цикла. И хотя включать в строку то, что будет удалено из нее позднее, вроде бы неразумно, такое решение намного «чище» и эффективнее (в большинстве случаев), чем попытка встраивания в цикл дополнительной логики:
$string = ''; foreach ($fields as $key => $value) { // Пароль не включается if ('password' != $value) { if (!empty($string)) { $string .= ','; } $string .= "<b>$value</b>"; } }
Как видим, здесь нам приходится проверять $string при каждом присоединении промежуточного значения.
Очевидно, что это ресурсоемко и гораздо лучше просто вызывать substr() за пределами цикла. Более того, ограничитель (в нашем случае запятая) включается в начало, а не в конец, потому что усечение строки в начале выполняется быстрее, чем в конце, что также позволяет нам получить более рациональный и быстрый код.
Понравился материал и хотите отблагодарить?
Просто поделитесь с друзьями и коллегами!
Смотрите также:
PHP: Получение информации об объекте или классе, методах, свойствах и наследовании |
|
Функции обратного вызова, анонимные функции и механизм замыканий |
|
Деструктор и копирование объектов с помощью метода __clone() Сервис онлайн-записи на собственном Telegram-боте
Попробуйте сервис онлайн-записи VisitTime на основе вашего собственного Telegram-бота:— Разгрузит мастера, специалиста или компанию; — Позволит гибко управлять расписанием и загрузкой; — Разошлет оповещения о новых услугах или акциях; — Позволит принять оплату на карту/кошелек/счет; — Позволит записываться на групповые и персональные посещения; — Поможет получить от клиента отзывы о визите к вам; — Включает в себя сервис чаевых. Для новых пользователей первый месяц бесплатно. Зарегистрироваться в сервисе |
|
Эволюция веб-разработчика или Почему фреймворк - это хорошо? |
|
Магические методы в PHP или методы-перехватчики (сеттеры, геттеры и др.) |
|
50 классных сервисов, программ и сайтов для веб-разработчиков |