
Reg.ru: домены и хостинг
Крупнейший регистратор и хостинг-провайдер в России.
Более 2 миллионов доменных имен на обслуживании.
Продвижение, почта для домена, решения для бизнеса.
Более 700 тыс. клиентов по всему миру уже сделали свой выбор.

Бесплатный Курс "Практика HTML5 и CSS3"
Освойте бесплатно пошаговый видеокурс
по основам адаптивной верстки
на HTML5 и CSS3 с полного нуля.

Фреймворк Bootstrap: быстрая адаптивная вёрстка
Пошаговый видеокурс по основам адаптивной верстки в фреймворке Bootstrap.
Научитесь верстать просто, быстро и качественно, используя мощный и практичный инструмент.
Верстайте на заказ и получайте деньги.
*Наведите курсор мыши для приостановки прокрутки.
Слияние массивов. Преобразование массива в строку
Слияние массивов
Достаточно частой задачей при работе с массивами является соединение двух массивов в один. Это называется "слияние".
Для технической реализации этого момента над понадобится функция 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 в нижнем регистре на ее исходном месте в массиве.
Обратите внимание, что для слияния массивов также может использоваться оператор +. Для ключей с одинаковыми именами, присутствующих в обоих массивах, используется значение из левого операнда. Переупорядочение для предотвращения коллизий при этом не выполняется.
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() за пределами цикла. Более того, ограничитель (в нашем случае запятая) включается в начало, а не в конец, потому что усечение строки в начале выполняется быстрее, чем в конце, что также позволяет нам получить более рациональный и быстрый код.
Понравился материал и хотите отблагодарить?
Просто поделитесь с друзьями и коллегами!
Смотрите также: