PHP: Функции

Полезные функции для работы с коллекциями

Стандартная библиотека в PHP небогата функциями для работы с коллекциями, строками или датами. Этот недостаток можно восполнить, подключив стороннюю библиотеку. Например, в мире JS, есть стандарт де-факто, без которого не обходится практически ни один проект - lodash. В PHP нет единого устоявшегося решения, но есть пачка небольших, которые используются в разных проектах. Часть из них основана на объектном синтаксисе, и мы рассмотрим их в более поздних уроках, а часть представляет из себя набор обычных функций. Кроме того, часть функций относится к функциям высшего порядка, которые мы ещё не проходили, но разберём уже в следующем уроке.

Объектные:

Использующие только функции:

Скажу сразу, что необходимость использования такой библиотеки в реальной работе возникает практически сразу. Те, кто не знает про них, постоянно пишут велосипеды. Ещё не так давно программисты в PHP создавали файлики с полезными функциями и таскали их из одного проекта в другой. Хорошо, что эти времена уже прошли и можно не тратить время на то, что уже делалось тысячу раз до нас. Однако, мы не сможем разобрать все возможные функции в рамках наших курсов. Кое-что рассмотрим, но в дальнейшем не забывайте периодически просматривать их на наличие чего-либо полезного.

Обратите внимание на документацию указанных библиотек. Зачастую они повторяют те функции, которые уже встроены в сам язык. Делается это по разным причинам. Вот некоторые из них:

  1. Консистентность (согласованность). Функции делают для того, чтобы библиотека была полной.
  2. Исправление ошибок PHP. Некоторые функции в PHP по историческим причинам иногда ведут себя неверно.
  3. Улучшение. Другой порядок аргументов, расширенные возможности, убранные ограничения или просто понятное имя.

Итак, поехали. Библиотека Funct.

Collections

last

Такая простая и нужная функция почему-то отсутствует в самом PHP.

<?php

\Funct\Collection\last([1, 2, 3]); // 3

rest

Принимает на вход массив и возвращает новый массив, в котором отсутствует первый элемент исходного.

<?php

\Funct\Collection\rest([5, 4, 3, 2, 1]); // [4, 3, 2, 1]

without

Возвращает копию массива, из которого удалены все значения, переданные в функцию вторым и последующими параметрами.

<?php

\Funct\Collection\without([1, 2, 1, 0, 3, 1, 4], 0, 1); // [2, 3, 4]

flattenAll

"Выпрямляет" вложенный массив, делая его плоским.

<?php

\Funct\Collection\flattenAll(['a', ['b', ['c', ['d']]]]); // ['a', 'b', 'c', 'd']

union

Находит объединение множеств.

<?php

\Funct\Collection\union([1, 2, 3], [101, 2, 1, 10], [2, 1]); // [1, 2, 3, 101, 10]

findWhere($collection, $value)

Просматривает массив и возвращает первое значение, совпадающее по всем парам «ключ-значение», переданным вторым параметром.

<?php

\Funct\Collection\findWhere(
    [
        ['title' => 'Book of Fooos', 'author' => 'FooBar', 'year' => 1111],
        ['title' => 'Cymbeline', 'author' => 'Shakespeare', 'year' => 1611],
        ['title' => 'The Tempest', 'author' => 'Shakespeare', 'year' => 1611],
        ['title' => 'Book of Foos Barrrs', 'author' => 'FooBar', 'year' => 2222],
        ['title' => 'Still foooing', 'author' => 'FooBar', 'year' => 3333],
        ['title' => 'Happy Foo', 'author' => 'FooBar', 'year' => 4444],
    ],
    ['author' => 'Shakespeare', 'year' => 1611]
); // ['title' => 'Cymbeline', 'author' => 'Shakespeare', 'year' => 1611]

Strings

camelize

Принимает на вход строку и возвращает её версию, записанную в нотации lowerCamelCase.

<?php
\Funct\Strings\camelize('data_rate'); // 'dataRate'
\Funct\Strings\camelize('background-color'); // 'backgroundColor'
\Funct\Strings\camelize('-moz-something'); // 'MozSomething'
\Funct\Strings\camelize('_car_speed_'); // 'CarSpeed'
\Funct\Strings\camelize('yes_we_can'); // 'yesWeCan

contains

Проверяет, включает ли строчка подстроку.

<?php
\Funct\Strings\contains('PHP is one of the best languages!', 'one'); // true

endsWith

Проверяет, оканчивается ли строчка на подстроку.

<?php

\Funct\Strings\endsWith("hello jon", 'jon'); // true

В этом уроке перечислена лишь небольшая часть из всего того многообразия, которое вы можете найти на гитхабе, в документации соответствующих библиотек. Изучить все функции в рамках курсов невозможно да и не нужно. Достаточно периодически проходиться по документации популярных библиотек и просматривать то, как они используются. Так, постепенно, вы научитесь писать более понятный и лаконичный код.


Дополнительные материалы

  1. Функции стандартной библиотеки

<span class="translation_missing" title="translation missing: ru.web.courses.lessons.mentors.mentor_avatars">Mentor Avatars</span>

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты.

Ошибки, сложный материал, вопросы >
Нашли опечатку или неточность?

Выделите текст, нажмите ctrl + enter и отправьте его нам. В течение нескольких дней мы исправим ошибку или улучшим формулировку.

Что-то не получается или материал кажется сложным?

Загляните в раздел «Обсуждение»:

  • задайте вопрос. Вы быстрее справитесь с трудностями и прокачаете навык постановки правильных вопросов, что пригодится и в учёбе, и в работе программистом;
  • расскажите о своих впечатлениях. Если курс слишком сложный, подробный отзыв поможет нам сделать его лучше;
  • изучите вопросы других учеников и ответы на них. Это база знаний, которой можно и нужно пользоваться.
Об обучении на Хекслете

Для полного доступа к курсу нужна профессиональная подписка

Профессиональная подписка откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
115
курсов
892
упражнения
2241
час теории
3196
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно.

  • 115 курсов, 2000+ часов теории
  • 800 практических заданий в браузере
  • 250 000 студентов

Отправляя форму, вы соглашаетесь c «Политикой конфиденциальности» и «Условиями оказания услуг».

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Rambler
Логотип компании Bookmate
Логотип компании Botmother

Есть вопрос или хотите участвовать в обсуждении?

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы соглашаетесь c «Политикой конфиденциальности» и «Условиями оказания услуг».