Слияние массивов. Преобразование массива в строку
Слияние массивов
Достаточно частой задачей при работе с массивами является соединение двух массивов в один. Это называется "слияние".
Для технической реализации этого момента над понадобится функция 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 классных сервисов, программ и сайтов для веб-разработчиков |
















