Verification: a143cc29221c9be0

Php array search без учета регистра

Php array search без учета регистра

Содержание

1. Проверьте, является ли первый символ строки прописным

Напишите программу на JavaScript, чтобы проверить, является ли первый символ строки прописным.
Перейти в редактор   Показать решение

2. Проверьте формат номера кредитной карты

Напишите программу на JavaScript для проверки номера кредитной карты.
Перейти в редактор   Показать решение

3. Проверьте, соответствует ли шаблон адреса электронной почты установленному формату

Напишите шаблон, соответствующий адресам электронной почты.
Логин содержит следующие символы ASCII:

  • Прописные (AZ) и строчные (az) английские буквы.
  • Цифры (0-9).
  • Символы ! # $% & '* + - / =? ^ _ `{| } ~
  • Точка . при условии, что это не первый или последний символ, и они не будут появляться один за другим.

Перейти в редактор   Показать решение

4. Поиск даты в строке

Напишите программу на JavaScript для поиска даты в строке.
Перейти в редактор   Показать решение

5. Обрезать пробелы в начале и конце строки

Напишите программу, используя регулярное выражение JavaScript, которая обрезает пробелы в начале и конце строки.
Перейти в редактор   Показать решение

6. Подсчитать количество слов в строке

Напишите программу на JavaScript для подсчета количества слов в строке.
Примечание:
- Удалите пробелы из начальной и конечной позиции.
- Преобразовать 2 или более пробелов в 1.
Перейти в редактор   Показать решение

7. Проверьте, является ли данное значение IP-адресом

Напишите функцию JavaScript, чтобы проверить, является ли данное значение значением IP или нет.
Перейти в редактор   Показать решение

8. Подсчет количества гласных в заданной строке

Напишите функцию JavaScript для подсчета количества гласных в заданной строке.
Перейти в редактор   Показать решение

9. Проверьте, является ли данное значение действительным URL-адресом

Напишите функцию JavaScript, чтобы проверить, является ли данное значение допустимым URL-адресом.
Перейти в редактор   Показать решение

10. Проверьте, является ли данное значение буквенно-цифровым

Напишите функцию JavaScript, чтобы проверить, является ли данное значение буквенно-цифровым.
Перейти в редактор   Показать решение

11. Проверьте, является ли данное значение показателем времени

Напишите функцию JavaScript, чтобы проверить, является ли данное значение строкой времени.
Перейти в редактор   Показать решение

12. Проверьте, является ли данное значение почтовым индексом США

Напишите функцию JavaScript, чтобы проверить, является ли данное значение почтовым индексом США или нет.
Перейти в редактор   Показать решение

13. Проверьте, является ли данное значение почтовым индексом Великобритании

Напишите функцию JavaScript, чтобы проверить, является ли данное значение почтовым индексом Великобритании или нет.
Перейти в редактор   Показать решение

14. Проверьте, является ли данное значение номером социального страхования

Напишите функцию JavaScript, чтобы проверить, является ли данное значение номером социального страхования.
Перейти в редактор   Показать решение

15. Проверьте, является ли данное значение шестнадцатеричным значением

Напишите функцию JavaScript, чтобы проверить, является ли данное значение шестнадцатеричным значением или нет.
Перейти в редактор   Показать решение

16. Проверьте, является ли данное значение шестнадцатеричным значением цвета

Напишите функцию JavaScript, чтобы проверить, является ли данное значение шестнадцатеричным значением цвета.
Перейти в редактор   Показать решение

17. Проверьте, представляет ли данное значение доменное имя

Напишите функцию JavaScript, чтобы проверить, представляет ли данное значение доменное имя.
Перейти в редактор   Показать решение

18. Заменить слова в строке

Напишите программу, которая без учета регистра, заменит "Site" на "wm-school" в строке.
Перейти в редактор   Показать решение

19. Проверьте, содержит ли данное значение тире или подчеркивание

Напишите функцию JavaScript для проверки того, содержит ли данное значение тире или подчеркивание.
Перейти в редактор   Показать решение

Обычная логика "сравнение-действие"

В общем случае язык не делает особых отличий в данных, например, на PHP сравнение строки и числа мало чем отличается. Число - это тоже строка, когда в ней содержатся только цифры, точка и нет ни одного символа, который не используется для представления числа в любой его форме (математическая нотация).

В случае контенкации число автоматом сливается со строкой без лишних вопросов и никаких скрытых ошибок, даже если функция gettype () дает "integer" или "double".

Однако есть разница между использованием функции is_int () и is_numeric (). Первая дает истину, когда параметр является только целым числом, вторая, когда любым числом или числовой строкой (переменная имеет тип "string", но содержит все, что предусмотрено математической нотацией).

Этот простой пример - хороший образец, как на PHP операторы сравнения строк ("==", "===", "!=", ...) могут подарить множество неожиданностей. Переменные могут менять свой тип, они не всегда числа, но почти всегда их можно привести к строке. В крайнем случае - это будет пустая строка.

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

Границы доступного функционала

PHP-сравнение двух строк хорошо "делает" функция strpos () - самый дешевый, верный и практичный вариант. Если функции число, то однозначно одна строка равна другой или одна входит в другую.

Кардинально противоположный, но тоже абсолютно верный подход - использование регулярных выражений.

Если вызов функции $cResult = scCheckFileName($cStr) даст "true", значит, строка является именем вордовского файла. У него будет только один вариант расширения ".docx" и никаких символов в имени: только буквы, цифры и знаки "_", "-".

Функция легко может быть переделана на другие виды файлов: $cPtr = "/^({4,239})\.(html|js|css|png|jpg|docx|txt){1}$/u". Такой вариант проверки строки расширяет диапазон загружаемых (например, на PHP сравнение строк применено "для загрузки файлов на сервер, без единого шанса на ошибку ввода") на html, js, css, ...

Использование strpos () и preg_match () - крайности. Они не имеют прямого отношения к вопросу сравнения срок. Но ведь вопрос алгоритма - это вопрос применения комбинации стилей, использование всех возможностей для достижения надежного и правильного результата.

Функционал PHP: сравнение строк

Арсенал языка по сравнению строк - это не только функции чистого сравнения, но и сочетание с поиском или заменой непосредственно. Не всегда действие должно совпадать со сравнением, поскольку последнее не обязательно ведет к изменению какой-либо строки. Часто нужно выбрать ту или иную ветку алгоритма.

Обычный вариант PHP: сравнение строк осуществляет функция int strcmp (s1, s2).

Результат функции:

  • 0 - строки равны;
  • -1 - первая строка меньше второй;
  • 1 - первая строка больше второй.

На практике это означает, что входит первая строка во вторую, от чего функция PHP (сравнение строк) принимает решение. Более ограниченный вариант strpos (), поскольку в последнем случае можно знать позицию вхождения.

Функция strcmp () - регистрозависима. Если нужно сравнить строки без учета регистра символов, PHP предлагает воспользоваться strcasecmp(). Синтаксис аналогичен.

На практике часто требуется работать не со всей строкой, а только с ее частью. Для этого в набор функций PHP (сравнение строк) входит strncmp (s1, s2, N). Третий параметр указывает выполнить сравнение только N-байт. Результат аналогичен strcmp ().

Массивы, строки и сравнение

Данные практически всегда представлены строками. Если рассматривать массивы, объекты, или информационные структуры, то это просто различные варианты комбинации более простых строковых структур.

Строковые массивы и строки могут быть представлены взаимодополняющим образом. Трансформация массива в строку функцией implode(array, symbol), например: $margins1 = implode(", ", $style->getInnerMargin()); ... работа алгоритма/пользователя...; $margins2 = implode(", ", $style->getInnerMargin()) позволяет слить все позиции объекта в строку позиций.

Затем можно выполнить PHP-сравнение строк и за один раз: $check = strcmp ($margins1, $margins2) и убедиться, что алгоритм или пользователь что-то изменил (или нет). Если выполнять сравнение обычным образом, то придется перебирать элементы массивов. Это происходит дольше и выглядит более громоздко.

Объекты и строки

Еще более эффектное использование PHP (сравнение строк) может быть реализовано посредством объектно-ориентированных идей.

Современное представление об объектах предполагает наличие у них свойств и методов. Первые обычно представлены числами, строками, массивами и другими объектами. Вторые зачастую включают в себя методы записи (put) в строку и восстановления из строки (get).

В отличие от массивов, объект выполняет работу со своими свойствами и взаимодействует с другими объектами. Объект "компетентен" в том, какие его свойства имеют реальное значение для алгоритма, программы в целом.

Этот момент дает основание и возможность при записи фиксировать в строку только нужную информацию, а при восстановлении из строки восстанавливать все рабочие свойства в нужное состояние. Обычно в любом объекте есть информация существенная и рабочая (временная). Реализация такой идеи позволяет экономить не только память, дисковое пространство, записи базы данных, но и делает возможным сравнение строк более простыми и точными средствами.

Синтаксис и семантика

PHP динамично развивается, и его функционал как в плане сравнения строк, так и в отношении их обработки постоянно совершенствуется. Однако ничто не мешает разработчику перенести центр тяжести в область семантики.

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

В этой главе описаны операторы сравнения. Эти операторы проверяют равенство (такое как равно, меньше, тождественно равно и т.д.) между двумя значениями и возвращают true или false в зависимости от того, как соотносятся операнды. Операторы сравнения всегда возвращают логические значения, и эти значения чаще всего применяются в таких операторах как , while или for для управления ходом исполнения программы.

Операторы сравнения
Пример Название Результат
$i == $y Равно TRUE если $i равно $y после преобразования типов данных.
$i === $y Идентично TRUE если $i равно $y и имеет тот же тип данных.
$i != $y Не равно
$i $y Не равно TRUE если $i не равно $y после преобразования типов данных.
$i !== $y Не идентично TRUE если $i не равно $y или они разных типов.
$i Меньше TRUE если $i строго меньше $y.
$i > $y Больше TRUE если $i строго больше $y.
$i Меньше или равно TRUE если $i меньше или равно $y.
$i >= $y Больше или равно TRUE если $i больше или равно $y.

Примечание: если попытаться вывести результат операции сравнения на экран, значение true отобразится в окне браузера как 1. Значение false соответствует числу 0 и не отображается на экран (в принципе это вы должны помнить из описания типа boolean). Если вы хотите увидеть результат в виде true или false используйте функцию var_dump() .

Так же стоит отметить: если сравнивается строка с числом или две строки, которые содержат числа, каждая строка будет преобразована в число, и сравниваться они будут как числа.

Оператор == (равенства)

Оператор == (равенства ) принимает операнды любого типа, если два операнда равны, возвращается значение true , в противном случае - false .

Если операнды имеют разные типы данных, PHP попытается преобразовать их перед сравнением к одному типу, например такое выражение "4" == 4 вернёт значение true , так как PHP автоматически приведет сравниваемые значения к одному типу данных. Аналогично, выражение $a == 1 вернёт значение true , если переменная $a содержит значение 1. Если требуется избежать неявного преобразования типов при сравнении, то следует использовать оператор идентичности, который будет рассмотрен далее.

Оператор === (идентичности)

Оператор === (идентичности ) принимает операнды любого типа и возвращает true , если их значения совпадают (равны), и false , если они различны. Чем же он отличается от оператора равенства? Оператор идентичности проверяет два операнда на «идентичность», руководствуясь строгим определением совпадения, это означает, что помимо равенства самих значений операндов, они также должны относиться к одному и тому же типу данных. В качестве примера рассмотрим такое выражение, как 5 === "5" , результатом этого выражения будет значение false , так как значение слева является числом, а значение справа - строкой, то есть у этих значений разные типы данных. Запомните, что операторы == и === означают «равно» и «идентично/тождественно равно» .

Оператор!= или (неравенства)

Оператор неравенства имеет два вида: != и . Он является противоположностью оператора == и возвращает true , в том случае, если значения операндов не равны. Оператор неравенства возвращает false только в том случае, если значения по обе стороны от него равны друг другу.

$var2); // вернет false var_dump("Home" "home"); // вернет true ?>

Оператор!== (неидентичности)

Оператор!== (неидентичности ) выполняет проверку, в точности противоположную оператору === . Он возвращает true , если значения операндов не равны друг другу или не относиться к одному и тому же типу данных. В качестве примера рассмотрим следующее выражение: 7 !== "7" , оператор «неидентичности» вернет true , потому что значение слева является числом, а значение справа строкой, то есть они относятся к разным типам данных. Отсюда легко будет запомнить, что операторы!= и!== означают «не равно» и «не идентично/тождественно не равно».

Оператор > (больше)

При использовании оператора > (больше ) сравнение возвращает true только в том случае, если значение слева от оператора больше значения справа от него. Как и другие операторы, оператор > работает не только с числовыми значениями, но и со строковыми. Но как одна строка может быть больше другой?

При работе со строками буква в нижнем регистре больше буквы в верхнем регистре. При сравнении строк PHP сначала проверяет на несовпадение первую букву строки. Если разницы не обнаруживается, происходит переход к следующему символу и т.д., пока не будет найдено различие или не будет достигнут конец строки. Если два значения с каждой из сторон оператора > будут равны, оператор также вернет false .

3); // вернет true var_dump("Hi" > "hi"); // вернет false var_dump(1 > 1); // вернет false ?>

Оператор

Оператор меньше значения, находящегося справа, и false , если значение левого операнда больше правого или значения равны.

Оператор >= (больше или равно)

Оператор >= (больше или равно ) немного отличается от тех операторов сравнения, которые рассматривались ранее. Он добавляет возможность равенства двух значений по обе стороны от него, то есть, чтобы было возвращено true , значение слева от оператора должно быть больше или равно значению справа от него. Оператор «больше или равно» возвращает false , только если значение слева от него меньше, чем значение справа.

= 5); // вернет true var_dump("hi" >= "hi"); // вернет true var_dump(1 >= 2); // вернет false ?>

Пространства имен

Пространство имен System.Text.Json содержит все точки входа и основные типы. Пространство имен System.Text.Json.Serialization содержит атрибуты и интерфейсы API для сложных сценариев и настройки, характерной для сериализации и десериализации. В примерах кода, приведенных в этой статье, для одного или обоих пространств имен необходимо добавить директивы using:

using System.Text.Json;
using System.Text.Json.Serialization;

Как записать объекты .NET в формате JSON (сериализация)

Чтобы записать JSON в строку или в файл, вызовите метод JsonSerializer.Serialize.

В следующем примере показано создание JSON в виде строки:

string jsonString = JsonSerializer.Serialize(weatherForecast);

В примере ниже для создания JSON-файла используется синхронный код:

jsonString = JsonSerializer.Serialize(weatherForecast);
File.WriteAllText(fileName, jsonString);

В следующем примере для создания JSON-файла используется асинхронный код:

using FileStream createStream = File.Create(fileName);
await JsonSerializer.SerializeAsync(createStream, weatherForecast);

В предыдущих примерах для сериализуемого типа используется определение типа. Перегрузка Serialize() принимает параметр универсального типа:

jsonString = JsonSerializer.Serialize(weatherForecast);

Пример сериализации

Ниже приведен пример класса, который содержит свойства типа коллекции и определяемый пользователем тип:

public class WeatherForecastWithPOCOs
{
    public DateTimeOffset Date { get; set; }
    public int TemperatureCelsius { get; set; }
    public string Summary { get; set; }
    public string SummaryField;
    public IList DatesAvailable { get; set; }
    public Dictionary TemperatureRanges { get; set; }
    public string[] SummaryWords { get; set; }
}

public class HighLowTemps
{
    public int High { get; set; }
    public int Low { get; set; }
}

Совет

POCO означает традиционный объект среды CLR. POCO — это тип .NET, который не зависит от каких-либо типов платформы, например посредством наследования или атрибутов.

Выходные данные JSON из сериализации экземпляра предыдущего типа выглядят следующим образом. По умолчанию выходные данные JSON сокращены (удалены пробелы, отступы и символы новой строки):

{"Date":"2019-08-01T00:00:00-07:00","TemperatureCelsius":25,"Summary":"Hot","DatesAvailable":["2019-08-01T00:00:00-07:00","2019-08-02T00:00:00-07:00"],"TemperatureRanges":{"Cold":{"High":20,"Low":-10},"Hot":{"High":60,"Low":20}},"SummaryWords":["Cool","Windy","Humid"]}

В следующем примере показан тот же объект JSON, но с форматированием (т. е. структурированный с пробелами и отступами):

{
  "Date": "2019-08-01T00:00:00-07:00",
  "TemperatureCelsius": 25,
  "Summary": "Hot",
  "DatesAvailable": [
    "2019-08-01T00:00:00-07:00",
    "2019-08-02T00:00:00-07:00"
  ],
  "TemperatureRanges": {
    "Cold": {
      "High": 20,
      "Low": -10
    },
    "Hot": {
      "High": 60,
      "Low": 20
    }
  },
  "SummaryWords": [
    "Cool",
    "Windy",
    "Humid"
  ]
}

Сериализация в UTF-8

Чтобы выполнить сериализацию в UTF-8, вызовите метод JsonSerializer.SerializeToUtf8Bytes:

byte[] jsonUtf8Bytes =JsonSerializer.SerializeToUtf8Bytes(weatherForecast);

Также доступна перегрузка Serialize, которая принимает Utf8JsonWriter.

Сериализация в UTF-8 происходит примерно на 5-10 % быстрее, чем при использовании строковых методов. Разница заключается в том, что байты (например, UTF-8) не нужно преобразовывать в строки (UTF-16).

Поведение сериализации

К поддерживаемым типам относятся:

Для обработки дополнительных типов или для обеспечения функциональности, которая не поддерживается встроенными преобразователями, можно реализовать пользовательские преобразователи.

Как считать JSON как объекты .NET (десериализация)

Чтобы выполнить десериализацию из строки или файла, вызовите метод JsonSerializer.Deserialize.

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

weatherForecast = JsonSerializer.Deserialize(jsonString);

Чтобы выполнить десериализацию из файла с помощью синхронного кода, выполните считывание файла в строку, как показано в следующем примере:

jsonString = File.ReadAllText(fileName);
weatherForecast = JsonSerializer.Deserialize(jsonString);

Чтобы выполнить десериализацию из файла с помощью асинхронного кода, вызовите метод DeserializeAsync:

using FileStream openStream = File.OpenRead(fileName);
weatherForecast = await JsonSerializer.DeserializeAsync(openStream);

Десериализация из UTF-8

Для десериализации из UTF-8 вызовите перегрузку JsonSerializer.Deserialize, которая принимает значения ReadOnlySpan или Utf8JsonReader, как показано в следующих примерах. В примерах предполагается, что JSON находится в массиве байтов jsonUtf8Bytes.

var readOnlySpan = new ReadOnlySpan(jsonUtf8Bytes);
WeatherForecast deserializedWeatherForecast = 
    JsonSerializer.Deserialize(readOnlySpan);
var utf8Reader = new Utf8JsonReader(jsonUtf8Bytes);
WeatherForecast deserializedWeatherForecast = 
    JsonSerializer.Deserialize(ref utf8Reader);

Поведение десериализации

При десериализации JSON применяются следующие правила поведения:

Для обеспечения функциональности, которая не поддерживается встроенными преобразователями, можно реализовать пользовательские преобразователи.

Сериализация в форматированный JSON

Чтобы структурировать выходные данные JSON, задайте для JsonSerializerOptions.WriteIndented значение true.

var options = new JsonSerializerOptions
{
    WriteIndented = true,
};
jsonString = JsonSerializer.Serialize(weatherForecast, options);

Ниже приведен пример типа для сериализации и структурирования данных JSON:

public class WeatherForecast
{
    public DateTimeOffset Date { get; set; }
    public int TemperatureCelsius { get; set; }
    public string Summary { get; set; }
}
{
  "Date": "2019-08-01T00:00:00-07:00",
  "TemperatureCelsius": 25,
  "Summary": "Hot"
}

При многократном использовании JsonSerializerOptions с одинаковыми параметрами не создавайте новый экземпляр JsonSerializerOptions при каждом использовании. Повторно используйте один и тот же экземпляр для каждого вызова. Дополнительные сведения см. в разделе Повторное использование экземпляров JsonSerializerOptions.

Включение полей

Используйте глобальный параметр JsonSerializerOptions.IncludeFields или атрибут [JsonInclude] для включения поля при сериализации или десериализации, как показано ниже:

using System;
using System.Text.Json;
using System.Text.Json.Serialization;

namespace Fields
{
    public class Forecast
    {
        public DateTime Date;
        public int TemperatureC;
        public string Summary;
    }

    public class Forecast2
    {
        [JsonInclude]
        public DateTime Date;
        [JsonInclude]
        public int TemperatureC;
        [JsonInclude]
        public string Summary;
    }

    public class Program
    {
        public static void Main()
        {
            var json =
                @"{""Date"":""2020-09-06T11:31:01.923395"",""TemperatureC"":-1,""Summary"":""Cold""} ";
            Console.WriteLine($"Input JSON: {json}");

            var options = new JsonSerializerOptions
            {
                IncludeFields = true,
            };
            var forecast = JsonSerializer.Deserialize(json, options);

            Console.WriteLine($"forecast.Date: {forecast.Date}");
            Console.WriteLine($"forecast.TemperatureC: {forecast.TemperatureC}");
            Console.WriteLine($"forecast.Summary: {forecast.Summary}");

            var roundTrippedJson =
                JsonSerializer.Serialize(forecast, options);

            Console.WriteLine($"Output JSON: {roundTrippedJson}");

            var forecast2 = JsonSerializer.Deserialize(json);

            Console.WriteLine($"forecast2.Date: {forecast2.Date}");
            Console.WriteLine($"forecast2.TemperatureC: {forecast2.TemperatureC}");
            Console.WriteLine($"forecast2.Summary: {forecast2.Summary}");

            roundTrippedJson = JsonSerializer.Serialize(forecast2);
            
            Console.WriteLine($"Output JSON: {roundTrippedJson}");
        }
    }
}

// Produces output like the following example:
//
//Input JSON: { "Date":"2020-09-06T11:31:01.923395","TemperatureC":-1,"Summary":"Cold"}
//forecast.Date: 9/6/2020 11:31:01 AM
//forecast.TemperatureC: -1
//forecast.Summary: Cold
//Output JSON: { "Date":"2020-09-06T11:31:01.923395","TemperatureC":-1,"Summary":"Cold"}
//forecast2.Date: 9/6/2020 11:31:01 AM
//forecast2.TemperatureC: -1
//forecast2.Summary: Cold
//Output JSON: { "Date":"2020-09-06T11:31:01.923395","TemperatureC":-1,"Summary":"Cold"}

Чтобы пропустить поля, предназначенные только для чтения, используйте глобальный параметр JsonSerializerOptions.IgnoreReadOnlyFields.

Методы расширения HttpClient и HttpContent

Сериализация и десериализация полезных данных JSON из сети являются обычными операциями. Методы расширения в HttpClient и HttpContent позволяют выполнять эти операции в одной строке кода. Эти методы расширения используют стандартные параметры веб-приложений для JsonSerializerOptions.

В следующем примере демонстрируется применение HttpClientJsonExtensions.GetFromJsonAsync и HttpClientJsonExtensions.PostAsJsonAsync:

using System;
using System.Net.Http;
using System.Net.Http.Json;
using System.Threading.Tasks;

namespace HttpClientExtensionMethods
{
    public class User
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Username { get; set; }
        public string Email { get; set; }
    }

    public class Program
    {
        public static async Task Main()
        {
            using HttpClient client = new()
            {
                BaseAddress = new Uri("https://jsonplaceholder.typicode.com")
            };

            // Get the user information.
            User user = await client.GetFromJsonAsync("users/1");
            Console.WriteLine($"Id: {user.Id}");
            Console.WriteLine($"Name: {user.Name}");
            Console.WriteLine($"Username: {user.Username}");
            Console.WriteLine($"Email: {user.Email}");

            // Post a new user.
            HttpResponseMessage response = await client.PostAsJsonAsync("users", user);
            Console.WriteLine(
                $"{(response.IsSuccessStatusCode ? "Success" : "Error")} - {response.StatusCode}");
        }
    }
}

// Produces output like the following example but with different names:
//
//Id: 1
//Name: Tyler King
//Username: Tyler
//Email: Tyler @contoso.com
//Success - Created

Для System.Text.Json существуют также методы расширения на HttpContent.

Методы расширения на HttpClient и HttpContent недоступны в System.Text.Json для .NET Core 3.1.

Введение

Laravel содержит множество глобальных «вспомогательных» функций PHP. Многие из этих функций используются самим фреймворком; однако, вы можете использовать их в своих собственных приложениях, если сочтете их удобными.

Доступные методы

Массивы и объекты

  • Arr::accessible
  • Arr::add
  • Arr::collapse
  • Arr::crossJoin
  • Arr::divide
  • Arr::dot
  • Arr::except
  • Arr::exists
  • Arr::first
  • Arr::flatten
  • Arr::forget
  • Arr::get
  • Arr::has
  • Arr::hasAny
  • Arr::isAssoc
  • Arr::last
  • Arr::only
  • Arr::pluck
  • Arr::prepend
  • Arr::pull
  • Arr::query
  • Arr::random
  • Arr::set
  • Arr::shuffle
  • Arr::sort
  • Arr::sortRecursive
  • Arr::where
  • Arr::wrap
  • data_fill
  • data_get
  • data_set
  • head
  • last

Пути

  • app_path
  • base_path
  • config_path
  • database_path
  • mix
  • public_path
  • resource_path
  • storage_path

Строки

  • __
  • class_basename
  • e
  • preg_replace_array
  • Str::after
  • Str::afterLast
  • Str::ascii
  • Str::before
  • Str::beforeLast
  • Str::between
  • Str::camel
  • Str::contains
  • Str::containsAll
  • Str::endsWith
  • Str::finish
  • Str::is
  • Str::isAscii
  • Str::isUuid
  • Str::kebab
  • Str::length
  • Str::limit
  • Str::lower
  • Str::markdown
  • Str::orderedUuid
  • Str::padBoth
  • Str::padLeft
  • Str::padRight
  • Str::plural
  • Str::pluralStudly
  • Str::random
  • Str::remove
  • Str::replace
  • Str::replaceArray
  • Str::replaceFirst
  • Str::replaceLast
  • Str::singular
  • Str::slug
  • Str::snake
  • Str::start
  • Str::startsWith
  • Str::studly
  • Str::substr
  • Str::substrCount
  • Str::title
  • Str::ucfirst
  • Str::upper
  • Str::uuid
  • Str::wordCount
  • Str::words
  • trans
  • trans_choice

Строки Fluent

Строки Fluent обеспечивают более гибкий объектно-ориентированный интерфейс для работы со строковыми значениями, позволяя объединять несколько строковых операций вместе с использованием более удобочитаемого синтаксиса по сравнению с традиционными строковыми операциями.

  • after
  • afterLast
  • append
  • ascii
  • basename
  • before
  • beforeLast
  • camel
  • contains
  • containsAll
  • dirname
  • endsWith
  • exactly
  • explode
  • finish
  • is
  • isAscii
  • isEmpty
  • isNotEmpty
  • kebab
  • length
  • limit
  • lower
  • ltrim
  • markdown
  • match
  • matchAll
  • padBoth
  • padLeft
  • padRight
  • pipe
  • plural
  • prepend
  • remove
  • replace
  • replaceArray
  • replaceFirst
  • replaceLast
  • replaceMatches
  • rtrim
  • singular
  • slug
  • snake
  • split
  • start
  • startsWith
  • studly
  • substr
  • tap
  • test
  • title
  • trim
  • ucfirst
  • upper
  • when
  • whenEmpty
  • words

URL-адреса

  • action
  • asset
  • route
  • secure_asset
  • secure_url
  • url

Разное

  • abort
  • abort_if
  • abort_unless
  • app
  • auth
  • back
  • bcrypt
  • blank
  • broadcast
  • cache
  • class_uses_recursive
  • collect
  • config
  • cookie
  • csrf_field
  • csrf_token
  • dd
  • dispatch
  • dump
  • env
  • event
  • filled
  • info
  • logger
  • method_field
  • now
  • old
  • optional
  • policy
  • redirect
  • report
  • request
  • rescue
  • resolve
  • response
  • retry
  • session
  • tap
  • throw_if
  • throw_unless
  • today
  • trait_uses_recursive
  • transform
  • validator
  • value
  • view
  • with

Список методов

Массивы и объекты

Arr::accessible()

Метод Arr::accessible определяет, доступно ли переданное значение массиву:

use Illuminate\Support\Arr;
use Illuminate\Support\Collection;

$isAccessible = Arr::accessible(['a' => 1, 'b' => 2]);



$isAccessible = Arr::accessible(new Collection);



$isAccessible = Arr::accessible('abc');



$isAccessible = Arr::accessible(new stdClass);


Arr::add()

Метод Arr::add добавляет переданную пару ключ / значение в массив, если указанный ключ еще не существует в массиве или установлен как null:

use Illuminate\Support\Arr;

$array = Arr::add(['name' => 'Desk'], 'price', 100);



$array = Arr::add(['name' => 'Desk', 'price' => null], 'price', 100);


Arr::collapse()

Метод Arr::collapse сворачивает массив массивов в один массив:

use Illuminate\Support\Arr;

$array = Arr::collapse([[1, 2, 3], [4, 5, 6], [7, 8, 9]]);


Arr::crossJoin()

Метод Arr::crossJoin перекрестно соединяет указанные массивы, возвращая декартово произведение со всеми возможными перестановками:

use Illuminate\Support\Arr;

$matrix = Arr::crossJoin([1, 2], ['a', 'b']);



$matrix = Arr::crossJoin([1, 2], ['a', 'b'], ['I', 'II']);


Arr::divide()

Метод Arr::divide возвращает два массива: один содержит ключи, а другой – значения переданного массива:

use Illuminate\Support\Arr;

[$keys, $values] = Arr::divide(['name' => 'Desk']);




Arr::dot()

Метод Arr::dot объединяет многомерный массив в одноуровневый, использующий «точечную нотацию» для обозначения глубины:

use Illuminate\Support\Arr;

$array = ['products' => ['desk' => ['price' => 100]]];

$flattened = Arr::dot($array);


Arr::except()

Метод Arr::except удаляет переданные пары ключ / значение из массива:

use Illuminate\Support\Arr;

$array = ['name' => 'Desk', 'price' => 100];

$filtered = Arr::except($array, ['price']);


Arr::exists()

Метод Arr::exists проверяет, существует ли переданный ключ в указанном массиве:

use Illuminate\Support\Arr;

$array = ['name' => 'John Doe', 'age' => 17];

$exists = Arr::exists($array, 'name');



$exists = Arr::exists($array, 'salary');


Arr::first()

Метод Arr::first возвращает первый элемент массива, прошедший тест переданного замыкания на истинность:

use Illuminate\Support\Arr;

$array = [100, 200, 300];

$first = Arr::first($array, function ($value, $key) {
    return $value >= 150;
});


Значение по умолчанию может быть передано в качестве третьего аргумента методу. Это значение будет возвращено, если ни одно из значений не пройдет проверку на истинность:

use Illuminate\Support\Arr;

$first = Arr::first($array, $callback, $default);

Arr::flatten()

Метод Arr::flatten объединяет многомерный массив в одноуровневый:

use Illuminate\Support\Arr;

$array = ['name' => 'Joe', 'languages' => ['PHP', 'Ruby']];

$flattened = Arr::flatten($array);


Arr::forget()

Метод Arr::forget удаляет переданную пару ключ / значение из глубоко вложенного массива, используя «точечную нотацию»:

use Illuminate\Support\Arr;

$array = ['products' => ['desk' => ['price' => 100]]];

Arr::forget($array, 'products.desk');


Arr::get()

Метод Arr::get извлекает значение из глубоко вложенного массива, используя «точечную нотацию»:

use Illuminate\Support\Arr;

$array = ['products' => ['desk' => ['price' => 100]]];

$price = Arr::get($array, 'products.desk.price');


Метод Arr::get также принимает значение по умолчанию, которое будет возвращено, если указанный ключ отсутствует в массиве:

use Illuminate\Support\Arr;

$discount = Arr::get($array, 'products.desk.discount', 0);


Arr::has()

Метод Arr::has проверяет, существует ли переданный элемент или элементы в массиве, используя «точечную нотацию»:

use Illuminate\Support\Arr;

$array = ['product' => ['name' => 'Desk', 'price' => 100]];

$contains = Arr::has($array, 'product.name');



$contains = Arr::has($array, ['product.price', 'product.discount']);


Arr::hasAny()

Метод Arr::hasAny проверяет, существует ли какой-либо элемент в переданном наборе в массиве, используя «точечную нотацию»:

use Illuminate\Support\Arr;

$array = ['product' => ['name' => 'Desk', 'price' => 100]];

$contains = Arr::hasAny($array, 'product.name');



$contains = Arr::hasAny($array, ['product.name', 'product.discount']);



$contains = Arr::hasAny($array, ['category', 'product.discount']);


Arr::isAssoc()

Метод Arr::isAssoc возвращает true, если переданный массив является ассоциативным. Массив считается ассоциативным, если в нем нет последовательных цифровых ключей, начинающихся с нуля:

use Illuminate\Support\Arr;

$isAssoc = Arr::isAssoc(['product' => ['name' => 'Desk', 'price' => 100]]);



$isAssoc = Arr::isAssoc([1, 2, 3]);


Arr::last()

Метод Arr::last возвращает последний элемент массива, прошедший тест переданного замыкания на истинность:

use Illuminate\Support\Arr;

$array = [100, 200, 300, 110];

$last = Arr::last($array, function ($value, $key) {
    return $value >= 150;
});


Значение по умолчанию может быть передано в качестве третьего аргумента методу. Это значение будет возвращено, если ни одно из значений не пройдет проверку на истинность:

use Illuminate\Support\Arr;

$last = Arr::last($array, $callback, $default);

Arr::only()

Метод Arr::only возвращает только указанные пары ключ / значение из переданного массива:

use Illuminate\Support\Arr;

$array = ['name' => 'Desk', 'price' => 100, 'orders' => 10];

$slice = Arr::only($array, ['name', 'price']);


Arr::pluck()

Метод Arr::pluck извлекает все значения для указанного ключа из массива:

use Illuminate\Support\Arr;

$array = [
    ['developer' => ['id' => 1, 'name' => 'Taylor']],
    ['developer' => ['id' => 2, 'name' => 'Abigail']],
];

$names = Arr::pluck($array, 'developer.name');


Вы также можете задать ключ результирующего списка:

use Illuminate\Support\Arr;

$names = Arr::pluck($array, 'developer.name', 'developer.id');


Arr::prepend()

Метод Arr::prepend помещает элемент в начало массива:

use Illuminate\Support\Arr;

$array = ['one', 'two', 'three', 'four'];

$array = Arr::prepend($array, 'zero');


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

use Illuminate\Support\Arr;

$array = ['price' => 100];

$array = Arr::prepend($array, 'Desk', 'name');


Arr::pull()

Метод Arr::pull возвращает и удаляет пару ключ / значение из массива:

use Illuminate\Support\Arr;

$array = ['name' => 'Desk', 'price' => 100];

$name = Arr::pull($array, 'name');




Значение по умолчанию может быть передано в качестве третьего аргумента методу. Это значение будет возвращено, если ключ не существует:

use Illuminate\Support\Arr;

$value = Arr::pull($array, $key, $default);

Arr::query()

Метод Arr::query преобразует массив в строку запроса:

use Illuminate\Support\Arr;

$array = [
    'name' => 'Taylor',
    'order' => [
        'column' => 'created_at',
        'direction' => 'desc'
    ]
];

Arr::query($array);


Arr::random()

Метод Arr::random возвращает случайное значение из массива:

use Illuminate\Support\Arr;

$array = [1, 2, 3, 4, 5];

$random = Arr::random($array);


Вы также можете указать количество элементов для возврата в качестве необязательного второго аргумента. Обратите внимание, что при указании этого аргумента, будет возвращен массив, даже если требуется только один элемент:

use Illuminate\Support\Arr;

$items = Arr::random($array, 2);


Arr::set()

Метод Arr::set устанавливает значение с помощью «точечной нотации» во вложенном массиве:

use Illuminate\Support\Arr;

$array = ['products' => ['desk' => ['price' => 100]]];

Arr::set($array, 'products.desk.price', 200);


Arr::shuffle()

Метод Arr::shuffle случайным образом перемешивает элементы в массиве:

use Illuminate\Support\Arr;

$array = Arr::shuffle([1, 2, 3, 4, 5]);


Arr::sort()

Метод Arr::sort сортирует массив по его значениям:

use Illuminate\Support\Arr;

$array = ['Desk', 'Table', 'Chair'];

$sorted = Arr::sort($array);


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

use Illuminate\Support\Arr;

$array = [
    ['name' => 'Desk'],
    ['name' => 'Table'],
    ['name' => 'Chair'],
];

$sorted = array_values(Arr::sort($array, function ($value) {
    return $value['name'];
}));


Arr::sortRecursive()

Метод Arr::sortRecursive рекурсивно сортирует массив с помощью метода sort для числовых подмассивов и ksort для ассоциативных подмассивов:

use Illuminate\Support\Arr;

$array = [
    ['Roman', 'Taylor', 'Li'],
    ['PHP', 'Ruby', 'JavaScript'],
    ['one' => 1, 'two' => 2, 'three' => 3],
];

$sorted = Arr::sortRecursive($array);


Arr::where()

Метод Arr::where фильтрует массив, используя переданное замыкание:

use Illuminate\Support\Arr;

$array = [100, '200', 300, '400', 500];

$filtered = Arr::where($array, function ($value, $key) {
    return is_string($value);
});


Arr::wrap()

Метод Arr::wrap оборачивает переданное значение в массив. Если переданное значение уже является массивом, то оно будет возвращено без изменений:

use Illuminate\Support\Arr;

$string = 'Laravel';

$array = Arr::wrap($string);


Если переданное значение равно null, то будет возвращен пустой массив:

use Illuminate\Support\Arr;

$array = Arr::wrap(null);


data_fill()

Функция data_fill устанавливает отсутствующее значение с помощью «точечной нотации» во вложенном массиве или объекте:

$data = ['products' => ['desk' => ['price' => 100]]];

data_fill($data, 'products.desk.price', 200);



data_fill($data, 'products.desk.discount', 10);


Допускается использование метасимвола подстановки *:

$data = [
    'products' => [
        ['name' => 'Desk 1', 'price' => 100],
        ['name' => 'Desk 2'],
    ],
];

data_fill($data, 'products.*.price', 200);


data_get()

Функция data_get возвращает значение с помощью «точечной нотации» из вложенного массива или объекта:

$data = ['products' => ['desk' => ['price' => 100]]];

$price = data_get($data, 'products.desk.price');


Функция data_get также принимает значение по умолчанию, которое будет возвращено, если указанный ключ не найден:

$discount = data_get($data, 'products.desk.discount', 0);


Допускается использование метасимвола подстановки *, предназначенный для любого ключа массива или объекта:

$data = [
    'product-one' => ['name' => 'Desk 1', 'price' => 100],
    'product-two' => ['name' => 'Desk 2', 'price' => 150],
];

data_get($data, '*.name');


data_set()

Функция data_set устанавливает значение с помощью «точечной нотации» во вложенном массиве или объекте:

$data = ['products' => ['desk' => ['price' => 100]]];

data_set($data, 'products.desk.price', 200);


Допускается использование метасимвола подстановки *:

$data = [
    'products' => [
        ['name' => 'Desk 1', 'price' => 100],
        ['name' => 'Desk 2', 'price' => 150],
    ],
];

data_set($data, 'products.*.price', 200);


По умолчанию все существующие значения перезаписываются. Если вы хотите, чтобы значение было установлено только в том случае, если оно не существует, вы можете передать false в качестве четвертого аргумента:

$data = ['products' => ['desk' => ['price' => 100]]];

data_set($data, 'products.desk.price', 200, $overwrite = false);


head()

Функция head возвращает первый элемент переданного массива:

$array = [100, 200, 300];

$first = head($array);


last()

Функция last возвращает последний элемент переданного массива:

$array = [100, 200, 300];

$last = last($array);


Пути

app_path()

Функция app_path возвращает полный путь к каталогу вашего приложения app. Вы также можете использовать функцию app_path для создания полного пути к файлу относительно каталога приложения:

$path = app_path();

$path = app_path('Http/Controllers/Controller.php');

base_path()

Функция base_path возвращает полный путь к корневому каталогу вашего приложения. Вы также можете использовать функцию base_path для генерации полного пути к заданному файлу относительно корневого каталога проекта:

$path = base_path();

$path = base_path('vendor/bin');

config_path()

Функция config_path возвращает полный путь к каталогу config вашего приложения. Вы также можете использовать функцию config_path для создания полного пути к заданному файлу в каталоге конфигурации приложения:

$path = config_path();

$path = config_path('app.php');

database_path()

Функция database_path возвращает полный путь к каталогу database вашего приложения. Вы также можете использовать функцию database_path для генерации полного пути к заданному файлу в каталоге базы данных:

$path = database_path();

$path = database_path('factories/UserFactory.php');

mix()

Функция mix возвращает путь к версионированному файлу Mix:

$path = mix('css/app.css');

public_path()

Функция public_path возвращает полный путь к каталогу public вашего приложения. Вы также можете использовать функцию public_path для генерации полного пути к заданному файлу в публичном каталоге:

$path = public_path();

$path = public_path('css/app.css');

resource_path()

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

$path = resource_path();

$path = resource_path('sass/app.scss');

storage_path()

Функция storage_path возвращает полный путь к каталогу storage вашего приложения. Вы также можете использовать функцию storage_path для генерации полного пути к заданному файлу в каталоге хранилища:

$path = storage_path();

$path = storage_path('app/file.txt');

Строки

__()

Функция __ переводит переданную строку перевода или ключ перевода, используя ваши файлы локализации:

echo __('Welcome to our application');

echo __('messages.welcome');

Если указанная строка перевода или ключ не существует, то функция __ вернет переданное значение. Итак, используя приведенный выше пример, функция __ вернет messages.welcome, если этот ключ перевода не существует.

class_basename()

Функция class_basename возвращает имя переданного класса с удаленным пространством имен этого класса:

$class = class_basename('Foo\Bar\Baz');


e()

Функция e запускает PHP-функцию htmlspecialchars с параметром double_encode, установленным по умолчанию в true:

echo e('html>foohtml>');

// <html>foo</html>

preg_replace_array()

Функция preg_replace_array последовательно заменяет переданный шаблон в строке, используя массив:

$string = 'The event will take place between :start and :end';

$replaced = preg_replace_array('/:[a-z_]+/', ['8:30', '9:00'], $string);


Str::after()

Метод Str::after возвращает все после переданного значения в строке. Если значение не существует в строке, то будет возвращена вся строка:

use Illuminate\Support\Str;

$slice = Str::after('This is my name', 'This is');


Str::afterLast()

Метод Str::afterLast возвращает все после последнего вхождения переданного значения в строке. Если значение не существует в строке, то будет возвращена вся строка:

use Illuminate\Support\Str;

$slice = Str::afterLast('App\Http\Controllers\Controller', '\\');


Str::ascii()

Метод Str::ascii попытается транслитерировать строку в ASCII значение:

use Illuminate\Support\Str;

$slice = Str::ascii('û');


Str::before()

Метод Str :: before возвращает все до переданного значения в строке:

use Illuminate\Support\Str;

$slice = Str::before('This is my name', 'my name');


Str::beforeLast()

Метод Str::beforeLast возвращает все до последнего вхождения переданного значения в строке:

use Illuminate\Support\Str;

$slice = Str::beforeLast('This is my name', 'is');


Str::between()

Метод Str::between возвращает часть строки между двумя значениями:

use Illuminate\Support\Str;

$slice = Str::between('This is my name', 'This', 'name');


Str::camel()

Метод Str::camel преобразует переданную строку в camelCase:

use Illuminate\Support\Str;

$converted = Str::camel('foo_bar');


Str::contains()

Метод Str::contains определяет, содержит ли переданная строка указанное значение (с учетом регистра):

use Illuminate\Support\Str;

$contains = Str::contains('This is my name', 'my');


Вы также можете указать массив значений, чтобы определить, содержит ли переданная строка какое-либо из значений:

use Illuminate\Support\Str;

$contains = Str::contains('This is my name', ['my', 'foo']);


Str::containsAll()

Метод Str::containsAll определяет, содержит ли переданная строка все значения массива:

use Illuminate\Support\Str;

$containsAll = Str::containsAll('This is my name', ['my', 'name']);


Str::endsWith()

Метод Str::endsWith определяет, заканчивается ли переданная строка указанным значением:

use Illuminate\Support\Str;

$result = Str::endsWith('This is my name', 'name');


Вы также можете указать массив значений, чтобы определить, заканчивается ли переданная строка каким-либо из значений:

use Illuminate\Support\Str;

$result = Str::endsWith('This is my name', ['name', 'foo']);



$result = Str::endsWith('This is my name', ['this', 'foo']);


Str::finish()

Метод Str::finish добавляет один экземпляр указанного значения в переданную строку, если она еще не заканчивается этим значением:

use Illuminate\Support\Str;

$adjusted = Str::finish('this/string', '/');



$adjusted = Str::finish('this/string/', '/');


Str::is()

Метод Str::is определяет, соответствует ли переданная строка указанному шаблону. Допускается использование метасимвола подстановки *:

use Illuminate\Support\Str;

$matches = Str::is('foo*', 'foobar');



$matches = Str::is('baz*', 'foobar');


Str::isAscii()

Метод Str::isAscii определяет, является ли переданная строка 7-битной ASCII:

use Illuminate\Support\Str;

$isAscii = Str::isAscii('Taylor');



$isAscii = Str::isAscii('ü');


Str::isUuid()

Метод Str::isUuid определяет, является ли переданная строка допустимым UUID:

use Illuminate\Support\Str;

$isUuid = Str::isUuid('a0a2a2d2-0b87-4a18-83f2-2529882be2de');



$isUuid = Str::isUuid('laravel');


Str::kebab()

Метод Str::kebab преобразует переданную строку в kebab-case:

use Illuminate\Support\Str;

$converted = Str::kebab('fooBar');


Str::length()

Метод Str::length возвращает длину переданной строки:

use Illuminate\Support\Str;

$length = Str::length('Laravel');


Str::limit()

Метод Str::limit усекает переданную строку до указанной длины:

use Illuminate\Support\Str;

$truncated = Str::limit('The quick brown fox jumps over the lazy dog', 20);


Вы также можете передать третий строковый аргумент, содержимое которого будет добавлено в конец:

use Illuminate\Support\Str;

$truncated = Str::limit('The quick brown fox jumps over the lazy dog', 20, ' (...)');


Str::lower()

Метод Str::lower преобразует переданную строку в нижний регистр:

use Illuminate\Support\Str;

$converted = Str::lower('LARAVEL');


Str::markdown()

Метод Str::markdown конвертирует текст с разметкой GitHub flavored Markdown в HTML:

use Illuminate\Support\Str;

$html = Str::markdown('# Laravel');



$html = Str::markdown('# Taylor Otwell', [
    'html_input' => 'strip',
]);


Str::orderedUuid()

Метод Str::orderedUuid генерирует UUID с «префиксом временной метки», который может быть эффективно сохранен в индексированном столбце базы данных. Каждый UUID, созданный с помощью этого метода, будет отсортирован после UUID, ранее созданных с помощью этого метода:

use Illuminate\Support\Str;

return (string) Str::orderedUuid();

Str::padBoth()

Метод Str::padBoth оборачивает функцию str_pad PHP, заполняя обе стороны строки другой строкой, пока конечная строка не достигнет желаемой длины:

use Illuminate\Support\Str;

$padded = Str::padBoth('James', 10, '_');



$padded = Str::padBoth('James', 10);


Str::padLeft()

Метод Str::padLeft оборачивает функцию str_pad PHP, заполняя левую часть строки другой строкой, пока конечная строка не достигнет желаемой длины:

use Illuminate\Support\Str;

$padded = Str::padLeft('James', 10, '-=');



$padded = Str::padLeft('James', 10);


Str::padRight()

Метод Str::padRight оборачивает функцию str_pad PHP, заполняя правую часть строки другой строкой, пока конечная строка не достигнет желаемой длины:

use Illuminate\Support\Str;

$padded = Str::padRight('James', 10, '-');



$padded = Str::padRight('James', 10);


Str::plural()

Метод Str::plural преобразует слово в форму множественного числа. В настоящее время этот метод поддерживает только английский язык:

use Illuminate\Support\Str;

$plural = Str::plural('car');



$plural = Str::plural('child');


Вы можете передать целое число в качестве второго аргумента метода для получения строки в единственном или множественном числе:

use Illuminate\Support\Str;

$plural = Str::plural('child', 2);



$singular = Str::plural('child', 1);


Str::pluralStudly()

Метод Str::pluralStudly преобразует строку единственного числа формата StudlyCase в форму множественного числа. В настоящее время этот метод поддерживает только английский язык:

use Illuminate\Support\Str;

$plural = Str::pluralStudly('VerifiedHuman');



$plural = Str::pluralStudly('UserFeedback');


Вы можете передать целое число в качестве второго аргумента метода для получения строки в единственном или множественном числе:

use Illuminate\Support\Str;

$plural = Str::pluralStudly('VerifiedHuman', 2);



$singular = Str::pluralStudly('VerifiedHuman', 1);


Str::random()

Метод Str::random генерирует случайную строку указанной длины. Этот метод использует функцию random_bytes PHP:

use Illuminate\Support\Str;

$random = Str::random(40);

Str::remove()

Метод Str::remove удаляет указанную подстроку или массив подстрок в строке:

use Illuminate\Support\Str;

$string = 'Peter Piper picked a peck of pickled peppers.';

$removed = Str::remove('e', $string);


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

Str::replace()

Метод Str::replace заменяет в строке одну подстроку другой:

use Illuminate\Support\Str;

$string = 'Laravel 8.x';

$replaced = Str::replace('8.x', '9.x', $string);


Str::replaceArray()

Метод Str::replaceArray последовательно заменяет указанное значение в строке, используя массив:

use Illuminate\Support\Str;

$string = 'The event will take place between ? and ?';

$replaced = Str::replaceArray('?', ['8:30', '9:00'], $string);


Str::replaceFirst()

Метод Str::replaceFirst заменяет первое вхождение переданного значения в строке:

use Illuminate\Support\Str;

$replaced = Str::replaceFirst('the', 'a', 'the quick brown fox jumps over the lazy dog');


Str::replaceLast()

Метод Str::replaceLast заменяет последнее вхождение переданного значения в строке:

use Illuminate\Support\Str;

$replaced = Str::replaceLast('the', 'a', 'the quick brown fox jumps over the lazy dog');


Str::singular()

Метод Str::singular преобразует слово в форму единственного числа. В настоящее время этот метод поддерживает только английский язык:

use Illuminate\Support\Str;

$singular = Str::singular('cars');



$singular = Str::singular('children');


Str::slug()

Метод Str::slug создает «дружественный фрагмент» URL-адреса из переданной строки:

use Illuminate\Support\Str;

$slug = Str::slug('Laravel 5 Framework', '-');


Str::snake()

Метод Str::snake преобразует переданную строку в snake_case:

use Illuminate\Support\Str;

$converted = Str::snake('fooBar');


Str::start()

Метод Str::start добавляет один экземпляр указанного значения в переданную строку, если она еще не начинается этим значением:

use Illuminate\Support\Str;

$adjusted = Str::start('this/string', '/');



$adjusted = Str::start('/this/string', '/');


Str::startsWith()

Метод Str::startsWith определяет, начинается ли переданная строка с указанного значения:

use Illuminate\Support\Str;

$result = Str::startsWith('This is my name', 'This');


Str::studly()

Метод Str::studly преобразует переданную строку в StudlyCase:

use Illuminate\Support\Str;

$converted = Str::studly('foo_bar');


Str::substr()

Метод Str::substr возвращает часть строки, заданную параметрами «начало» и «длина»:

use Illuminate\Support\Str;

$converted = Str::substr('The Laravel Framework', 4, 7);


Str::substrCount()

Метод Str::substrCount возвращает число вхождений подстроки в строку:

use Illuminate\Support\Str;

$count = Str::substrCount('If you like ice cream, you will like snow cones.', 'like');


Str::title()

Метод Str::title преобразует переданную строку в Title Case:

use Illuminate\Support\Str;

$converted = Str::title('a nice title uses the correct case');


Str::ucfirst()

Метод Str::ucfirst возвращает переданную строку с первой заглавной буквой:

use Illuminate\Support\Str;

$string = Str::ucfirst('foo bar');


Str::upper()

Метод Str::upper преобразует переданную строку в верхний регистр:

use Illuminate\Support\Str;

$string = Str::upper('laravel');


Str::uuid()

Метод Str::uuid генерирует UUID (версия 4):

use Illuminate\Support\Str;

return (string) Str::uuid();

wordCount

Метод wordCount возвращает число слов в строке:

use Illuminate\Support\Str;

Str::wordCount('Hello, world!'); 

Str::words()

Метод Str::words ограничивает количество слов в строке. Дополнительная строка может быть передана этому методу через его третий аргумент, чтобы указать, какая строка должна быть добавлена в конец усеченной строки:

use Illuminate\Support\Str;

return Str::words('Perfectly balanced, as all things should be.', 3, ' >>>');


trans()

Функция trans переводит переданный ключ перевода, используя ваши файлы локализации:

echo trans('messages.welcome');

Если указанный ключ перевода не существует, функция trans вернет данный ключ. Итак, используя приведенный выше пример, функция trans вернет messages.welcome, если ключ перевода не существует.

trans_choice()

Функция trans_choice переводит заданный ключ перевода с изменением формы слова:

echo trans_choice('messages.notifications', $unreadCount);

Если указанный ключ перевода не существует, функция trans_choice вернет данный ключ. Итак, используя приведенный выше пример, функция trans_choice вернет messages.notifications, если ключ перевода не существует.

Строки Fluent

Строки Fluent обеспечивают более гибкий объектно-ориентированный интерфейс для работы со строковыми значениями, позволяя объединять несколько строковых операций вместе с использованием более удобочитаемого синтаксиса по сравнению с традиционными строковыми операциями.

after

Метод after возвращает все после переданного значения в строке. Вся строка будет возвращена, если значение не существует в строке:

use Illuminate\Support\Str;

$slice = Str::of('This is my name')->after('This is');


afterLast

Метод afterLast возвращает все после последнего вхождения переданного значения в строке. Вся строка будет возвращена, если значение не существует в строке:

use Illuminate\Support\Str;

$slice = Str::of('App\Http\Controllers\Controller')->afterLast('\\');


append

Метод append добавляет указанные значения в строку:

use Illuminate\Support\Str;

$string = Str::of('Taylor')->append(' Otwell');


ascii

Метод ascii попытается транслитерировать строку в значение ASCII:

use Illuminate\Support\Str;

$string = Str::of('ü')->ascii();


basename

Метод basename вернет завершающий компонент имени переданной строки:

use Illuminate\Support\Str;

$string = Str::of('/foo/bar/baz')->basename();


При необходимости вы можете указать «расширение», которое будет удалено из завершающего компонента:

use Illuminate\Support\Str;

$string = Str::of('/foo/bar/baz.jpg')->basename('.jpg');


before

Метод before возвращает все до указанного значения в строке:

use Illuminate\Support\Str;

$slice = Str::of('This is my name')->before('my name');


beforeLast

Метод beforeLast возвращает все до последнего вхождения переданного значения в строку:

use Illuminate\Support\Str;

$slice = Str::of('This is my name')->beforeLast('is');


camel

Метод camel преобразует переданную строку в camelCase:

use Illuminate\Support\Str;

$converted = Str::of('foo_bar')->camel();


contains

Метод contains определяет, содержит ли переданная строка указанное значение (с учетом регистра):

use Illuminate\Support\Str;

$contains = Str::of('This is my name')->contains('my');


Вы также можете указать массив значений, чтобы определить, содержит ли переданная строка какое-либо из этих значений:

use Illuminate\Support\Str;

$contains = Str::of('This is my name')->contains(['my', 'foo']);


containsAll

Метод containsAll определяет, содержит ли переданная строка все значения массива:

use Illuminate\Support\Str;

$containsAll = Str::of('This is my name')->containsAll(['my', 'name']);


dirname

Метод dirname возвращает родительскую часть директории переданной строки:

use Illuminate\Support\Str;

$string = Str::of('/foo/bar/baz')->dirname();


При желании вы можете указать, сколько уровней каталогов вы хотите вырезать из строки:

use Illuminate\Support\Str;

$string = Str::of('/foo/bar/baz')->dirname(2);


endsWith

Метод endsWith определяет, заканчивается ли переданная строка указанным значением:

use Illuminate\Support\Str;

$result = Str::of('This is my name')->endsWith('name');


Вы также можете указать массив значений, чтобы определить, заканчивается ли переданная строка каким-либо из указанных значений:

use Illuminate\Support\Str;

$result = Str::of('This is my name')->endsWith(['name', 'foo']);



$result = Str::of('This is my name')->endsWith(['this', 'foo']);


exactly

Метод exactly определяет, является ли переданная строка точным совпадением с другой строкой:

use Illuminate\Support\Str;

$result = Str::of('Laravel')->exactly('Laravel');


explode

Метод explode разделяет строку по заданному разделителю и возвращает коллекцию, содержащую каждый раздел строки разбиения:

use Illuminate\Support\Str;

$collection = Str::of('foo bar baz')->explode(' ');


finish

Метод finish добавляет один экземпляр указанного значения в переданную строку, если она еще не заканчивается этим значением:

use Illuminate\Support\Str;

$adjusted = Str::of('this/string')->finish('/');



$adjusted = Str::of('this/string/')->finish('/');


is

Метод is определяет, соответствует ли переданная строка указанному шаблону. Допускается использование метасимвола подстановки *:

use Illuminate\Support\Str;

$matches = Str::of('foobar')->is('foo*');



$matches = Str::of('foobar')->is('baz*');


isAscii

Метод isAscii определяет, является ли переданная строка строкой ASCII:

use Illuminate\Support\Str;

$result = Str::of('Taylor')->isAscii();



$result = Str::of('ü')->isAscii();


isEmpty

Метод isEmpty определяет, является ли переданная строка пустой:

use Illuminate\Support\Str;

$result = Str::of('  ')->trim()->isEmpty();



$result = Str::of('Laravel')->trim()->isEmpty();


isNotEmpty

Метод isNotEmpty определяет, является ли переданная строка не пустой:

use Illuminate\Support\Str;

$result = Str::of('  ')->trim()->isNotEmpty();



$result = Str::of('Laravel')->trim()->isNotEmpty();


kebab

Метод kebab преобразует переданную строку в kebab-case:

use Illuminate\Support\Str;

$converted = Str::of('fooBar')->kebab();


length

Метод length возвращает длину переданной строки:

use Illuminate\Support\Str;

$length = Str::of('Laravel')->length();


limit

Метод limit усекает переданную строку до указанной длины:

use Illuminate\Support\Str;

$truncated = Str::of('The quick brown fox jumps over the lazy dog')->limit(20);


Вы также можете передать второй строковый аргумент, содержимое которого будет добавлено в конец:

use Illuminate\Support\Str;

$truncated = Str::of('The quick brown fox jumps over the lazy dog')->limit(20, ' (...)');


lower

Метод lower преобразует переданную строку в нижний регистр:

use Illuminate\Support\Str;

$result = Str::of('LARAVEL')->lower();


ltrim

Метод ltrim удаляет символы из начала строки:

use Illuminate\Support\Str;

$string = Str::of('  Laravel  ')->ltrim();



$string = Str::of('/Laravel/')->ltrim('/');


markdown

Метод markdown конвертирует текст с разметкой GitHub flavored Markdown в HTML:

use Illuminate\Support\Str;

$html = Str::of('# Laravel')->markdown();



$html = Str::of('# Taylor Otwell')->markdown([
    'html_input' => 'strip',
]);


match

Метод match вернет часть строки, которая соответствует указанному шаблону регулярного выражения:

use Illuminate\Support\Str;

$result = Str::of('foo bar')->match('/bar/');



$result = Str::of('foo bar')->match('/foo (.*)/');


matchAll

Метод matchAll вернет коллекцию, содержащую части строки, которые соответствуют указанному шаблону регулярного выражения:

use Illuminate\Support\Str;

$result = Str::of('bar foo bar')->matchAll('/bar/');


Если вы укажете группировку в выражении, то Laravel вернет коллекцию совпадений этой группы:

use Illuminate\Support\Str;

$result = Str::of('bar fun bar fly')->matchAll('/f(\w*)/');


If no matches are found, an empty collection will be returned.

padBoth

Метод padBoth оборачивает функцию str_pad PHP, заполняя обе стороны строки другой строкой, пока конечная строка не достигнет желаемой длины:

use Illuminate\Support\Str;

$padded = Str::of('James')->padBoth(10, '_');



$padded = Str::of('James')->padBoth(10);


padLeft

Метод padLeft оборачивает функцию str_pad PHP, заполняя левую часть строки другой строкой, пока конечная строка не достигнет желаемой длины:

use Illuminate\Support\Str;

$padded = Str::of('James')->padLeft(10, '-=');



$padded = Str::of('James')->padLeft(10);


padRight

Метод padRight оборачивает функцию str_pad PHP, заполняя правую часть строки другой строкой, пока конечная строка не достигнет желаемой длины:

use Illuminate\Support\Str;

$padded = Str::of('James')->padRight(10, '-');



$padded = Str::of('James')->padRight(10);


pipe

Метод pipe позволяет вам преобразовать строку, передав ее текущее значение указанной функции обратного вызова:

use Illuminate\Support\Str;

$hash = Str::of('Laravel')->pipe('md5')->prepend('Checksum: ');



$closure = Str::of('foo')->pipe(function ($str) {
    return 'bar';
});


plural

Метод plural преобразует слово в форму множественного числа. В настоящее время этот метод поддерживает только английский язык:

use Illuminate\Support\Str;

$plural = Str::of('car')->plural();



$plural = Str::of('child')->plural();


Вы можете передать целое число в качестве второго аргумента метода для получения строки в единственном или множественном числе:

use Illuminate\Support\Str;

$plural = Str::of('child')->plural(2);



$plural = Str::of('child')->plural(1);


prepend

Метод prepend добавляет указанные значения в начало строки:

use Illuminate\Support\Str;

$string = Str::of('Framework')->prepend('Laravel ');


remove

Метод remove удаляет указанную подстроку или массив подстрок в строке:

use Illuminate\Support\Str;

$string = Str::of('Arkansas is quite beautiful!')->remove('quite');


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

replace

Метод replace заменяет указанную строку внутри строки:

use Illuminate\Support\Str;

$replaced = Str::of('Laravel 6.x')->replace('6.x', '7.x');


replaceArray

Метод replaceArray последовательно заменяет указанное значение в строке, используя массив:

use Illuminate\Support\Str;

$string = 'The event will take place between ? and ?';

$replaced = Str::of($string)->replaceArray('?', ['8:30', '9:00']);


replaceFirst

Метод replaceFirst заменяет первое вхождение указанного значения в строке:

use Illuminate\Support\Str;

$replaced = Str::of('the quick brown fox jumps over the lazy dog')->replaceFirst('the', 'a');


replaceLast

Метод replaceLast заменяет последнее вхождение указанного значения в строке:

use Illuminate\Support\Str;

$replaced = Str::of('the quick brown fox jumps over the lazy dog')->replaceLast('the', 'a');


replaceMatches

Метод replaceMatches заменяет все части строки, соответствующие указанному шаблону, переданной строки:

use Illuminate\Support\Str;

$replaced = Str::of('(+1) 501-555-1000')->replaceMatches('/[^A-Za-z0-9]++/', '')


Метод replaceMatches также принимает замыкание, которое будет вызвано для каждой части строки, соответствующей шаблону, что позволяет вам выполнять логику замены в замыкании и возвращать замененное значение:

use Illuminate\Support\Str;

$replaced = Str::of('123')->replaceMatches('/\d/', function ($match) {
    return '['.$match[0].']';
});


rtrim

Метод rtrim удаляет символы из конца строки:

use Illuminate\Support\Str;

$string = Str::of('  Laravel  ')->rtrim();



$string = Str::of('/Laravel/')->rtrim('/');


singular

Метод singular преобразует слово в форму единственного числа. В настоящее время этот метод поддерживает только английский язык:

use Illuminate\Support\Str;

$singular = Str::of('cars')->singular();



$singular = Str::of('children')->singular();


slug

Метод slug создает «дружественный фрагмент» URL-адреса из переданной строки:

use Illuminate\Support\Str;

$slug = Str::of('Laravel Framework')->slug('-');


snake

Метод snake преобразует переданную строку в snake_case:

use Illuminate\Support\Str;

$converted = Str::of('fooBar')->snake();


split

Метод split разбивает строку на коллекцию с помощью регулярного выражения:

use Illuminate\Support\Str;

$segments = Str::of('one, two, three')->split('/[\s,]+/');


start

Метод start добавляет один экземпляр указанного значения в переданную строку, если она еще не начинается этим значением:

use Illuminate\Support\Str;

$adjusted = Str::of('this/string')->start('/');



$adjusted = Str::of('/this/string')->start('/');


startsWith

Метод startsWith определяет, начинается ли переданная строка с указанного значения:

use Illuminate\Support\Str;

$result = Str::of('This is my name')->startsWith('This');


studly

Метод studly преобразует переданную строку в StudlyCase:

use Illuminate\Support\Str;

$converted = Str::of('foo_bar')->studly();


substr

Метод substr возвращает часть строки, заданную параметрами «начало» и «длина»:

use Illuminate\Support\Str;

$string = Str::of('Laravel Framework')->substr(8);



$string = Str::of('Laravel Framework')->substr(8, 5);


tap

Метод tap передает строку заданному замыканию, позволяя вам взаимодействовать с ней, не затрагивая при этом саму строку. Исходная строка возвращается методом tap независимо от того, что возвращает замыкание:

use Illuminate\Support\Str;

$string = Str::of('Laravel')
    ->append(' Framework')
    ->tap(function ($string) {
        dump('String after append: ' . $string);
    })
    ->upper();


test

Метод test определяет, соответствует ли строка переданному шаблону регулярного выражения:

use Illuminate\Support\Str;

$result = Str::of('Laravel Framework')->test('/Laravel/');


title

Метод title преобразует переданную строку в Title Case:

use Illuminate\Support\Str;

$converted = Str::of('a nice title uses the correct case')->title();


trim

Метод trim обрезает переданную строку:

use Illuminate\Support\Str;

$string = Str::of('  Laravel  ')->trim();



$string = Str::of('/Laravel/')->trim('/');


ucfirst

Метод ucfirst возвращает переданную строку с первой заглавной буквой:

use Illuminate\Support\Str;

$string = Str::of('foo bar')->ucfirst();


upper

Метод upper преобразует переданную строку в верхний регистр:

use Illuminate\Support\Str;

$adjusted = Str::of('laravel')->upper();


when

Метод when вызывает указанное замыкание, если переданное условие истинно. Замыкание получит экземпляр Fluent:

use Illuminate\Support\Str;

$string = Str::of('Taylor')
                ->when(true, function ($string) {
                    return $string->append(' Otwell');
                });


При необходимости вы можете передать другое замыкание в качестве третьего параметра методу when. Это замыкание будет выполнено, если параметр условия оценивается как false.

whenEmpty

Метод whenEmpty вызывает переданное замыкание, если строка пуста. Если замыкание возвращает значение, то это значение будет возвращено методом whenEmpty. Если замыкание не возвращает значение, будет возвращен экземпляр Fluent:

use Illuminate\Support\Str;

$string = Str::of('  ')->whenEmpty(function ($string) {
    return $string->trim()->prepend('Laravel');
});


wordCount

Метод wordCount возвращает число слов в строке:

use Illuminate\Support\Str;

Str::of('Hello, world!')->wordCount(); 

words

Метод words ограничивает количество слов в строке. Дополнительная строка может быть передана этому методу, чтобы указать, какая строка должна быть добавлена в конец усеченной строки:

use Illuminate\Support\Str;

$string = Str::of('Perfectly balanced, as all things should be.')->words(3, ' >>>');


URL-адреса

action()

Функция action генерирует URL-адрес для переданного действия контроллера:

use App\Http\Controllers\HomeController;

$url = action([HomeController::class, 'index']);

Если метод принимает параметры маршрута, вы можете передать их как второй аргумент методу:

$url = action([UserController::class, 'profile'], ['id' => 1]);

asset()

Функция asset генерирует URL для исходника (прим. перев.: директория resources), используя текущую схему запроса (HTTP или HTTPS):

$url = asset('img/photo.jpg');

Вы можете настроить хост URL исходников, установив переменную ASSET_URL в вашем файле .env. Это может быть полезно, если вы размещаете свои исходники на внешнем сервисе, таком как Amazon S3 или другой CDN:



$url = asset('img/photo.jpg'); 

route()

Функция route генерирует URL для переданного именованного маршрута:

$url = route('route.name');

Если маршрут принимает параметры, вы можете передать их в качестве второго аргумента методу:

$url = route('route.name', ['id' => 1]);

По умолчанию функция route генерирует абсолютный URL. Если вы хотите создать относительный URL, вы можете передать false в качестве третьего аргумента:

$url = route('route.name', ['id' => 1], false);

secure_asset()

Функция secure_asset генерирует URL для исходника, используя HTTPS:

$url = secure_asset('img/photo.jpg');

secure_url()

Функция secure_url генерирует полный URL-адрес для указанного пути, используя HTTPS. Дополнительные сегменты URL могут быть переданы во втором аргументе функции:

$url = secure_url('user/profile');

$url = secure_url('user/profile', [1]);

url()

Функция url генерирует полный URL-адрес для указанного пути:

$url = url('user/profile');

$url = url('user/profile', [1]);

Если путь не указан, будет возвращен экземпляр Illuminate\Routing\UrlGenerator:

$current = url()->current();

$full = url()->full();

$previous = url()->previous();

Допустим у нас есть массив

$arr = [
	2 => 'Виноград',
	1 => 'Арбуз',
	3 => 'Банан',
];

Он неправильно отсортирован, как видите ключи (1,2,3) и значения (виноград, арбуз, банан) идут не по порядку. Давайте это исправим:

Сортировка массива по ключу

ksort($arr); // По возрастанию
krsort($arr); // По убыванию

Сортировка массива по значению

sort($arr);// По возрастанию 
asort($arr);// По возрастанию, сохраняет ключи
rsort($arr); // По убыванию
arsort($arr); // По убыванию, сохраняет ключи
array_reverse($arr); // От конца к началу
array_reverse($arr, true); // От конца к началу, сохраняет ключи
shuffle($arr); // Перемешать массив в случайном порядке

Свои способы сортировки

Если предложенные способы сортировки вам не подходят, то можно создать свой способ сортировки ключей и значений массивов. Для этого есть 3 функции uasort, uksort и usort. С их помощью мы можем задать свою callback функцию, которая будет сравнивать элементы между собой и определять какой из них "больше" и какой "меньше".

  • uasort — Сортирует массив, используя пользовательскую функцию для сравнения элементов с сохранением ключей
  • uksort — Сортирует массив по ключам, используя пользовательскую функцию для сравнения ключей
  • usort — Сортирует массив по значениям используя пользовательскую функцию для сравнения элементов

Принцип работы следующий, мы создаем callback функцию сравнения по какому-то необычному признаку. Она должна сравнивать элементы и возвращать одно из трех значений: -1, 0 или 1

Давайте рассмотрим как они работают напримере функции uasort, которая сравнивает значения с сохранением ключей.

// Наша функция сравнения
$callbackCmpFunction = function cmp($a, $b) {
    if ($a == $b) { // если 2 значения массива равны
        return 0; // вернем 0
    }
    return ($a 
  • -1 - возвращается, когда элемент, который слева больше правого
  • 0 - когда элементы равны
  • 1 - когда правый больше левого

Применить нашу новую функцию можно так:

// Сортируемый массив
$array = array('a' => 4, 'b' => 8, 'c' => -1, 'd' => -9, 'e' => 2, 'f' => 5, 'g' => 3, 'h' => -4);
print_r($array);

// Сортируем и выводим получившийся массив
uasort($array, $callbackCmpFunction); // вторым параметром указываем нашу callback функцию
print_r($array);

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

Функции без сохранения ключей sort и rsort, сбрасывают ключи и они начинают идти по порядку (0, 1, 2, ...)

Иногда бывает полезно одно, иногда - другое. В зависимости от задачи.

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

Флаги типа сортировки:

  • SORT_REGULAR - обычное сравнение элементов; подробности описаны в разделе операторы сравнения
  • SORT_NUMERIC - числовое сравнение элементов
  • SORT_STRING - строковое сравнение элементов
  • SORT_LOCALE_STRING - сравнение элементов как строки на основе текущего языкового стандарта. Используется языковой стандарт, который можно изменить с помощью setlocale()
  • SORT_NATURAL - сравнение элементов как строки, используя "естественный порядок", например natsort()
  • SORT_FLAG_CASE - можно объединять (побитовое ИЛИ) с SORT_STRING или SORT_NATURAL для сортировки строк без учёта регистра. Пример: sort($arr, SORT_NATURAL | SORT_FLAG_CASE)

Флаг сортировки передается в функцию сортировки, например так:

sort($arr, SORT_STRING); 

Подробнее о том, как работают флаги сортировки и зачем они нужны.

Сортировка многомерных массивов

Создадим функцию, которая нам поможет в сортировке массивов

// создадим функцию которая нам поможет в сортировке массивов
function array_orderby()
{
    $args = func_get_args();
    $data = array_shift($args);
    foreach ($args as $n => $field) {
        if (is_string($field)) {
            $tmp = array();
            foreach ($data as $key => $row)
                $tmp[$key] = $row[$field];
            $args[$n] = $tmp;
            }
    }
    $args[] = &$data;
    call_user_func_array('array_multisort', $args);
    return array_pop($args);
}

Пример работы этой функции array_orderby():

$data = [
	['volume' => 67, 'edition' => 2],
	['volume' => 86, 'edition' => 1],
	['volume' => 85, 'edition' => 6],
	['volume' => 98, 'edition' => 2],
	['volume' => 86, 'edition' => 6],
	['volume' => 67, 'edition' => 7],
];
	
// Сортируем массив $data сначала по volume, затем по edition
$sorted = array_orderby($data, 'volume', SORT_DESC, 'edition', SORT_ASC);
// SORT_ASC - по возрастанию
// SORT_DESC - по убыванию

print_r($sorted); // выводим результат

Если вам нужно что-то совсем уж специфическое при сортировки многомерных массивов

Можете создать и другие callback функции сортировки самостоятельно.

$data = [
	['volume' => 67, 'edition' => 2],
	['volume' => 86, 'edition' => 1],
	['volume' => 85, 'edition' => 6],
	['volume' => 98, 'edition' => 2],
	['volume' => 86, 'edition' => 6],
	['volume' => 67, 'edition' => 7],
];

// Создадим 2 функции
function cmp_function($a, $b){ // volume по возрастанию
	return ($a['volume'] > $b['volume']);
}

function cmp_function_desc($a, $b){ // volume по убыванию
	return ($a['volume'] 


Пример 1: Сортировка массива на основе строковых ключей (по умолчанию)

В следующем примере показано использование ksort() без необязательного аргумента.

Сначала создайте файл PHP со следующим скриптом. В скрипте объявлен одномерный ассоциативный массив из четырех элементов. Здесь функция ksort() используется для сортировки массива по значениям ключей в порядке возрастания. Если в функции ksort() не используется необязательный аргумент, массив будет отсортирован обычным образом. Затем цикл foreach используется для печати отсортированного массива с ключами и значениями.

 php
// Объявить ассоциативный массив
$clients = array ("c4089" => "AndreyEx", "c1289" => "Destroyer", "c2390" => "Master", "c1906" => "Elephant" );

// Применение по умолчанию ksort()
ksort($clients);

echo "

Отсортированные значения массива:

"; echo " $key = $value
"; } ?>

Вывод:

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

Пример 2: Сортировка массива на основе цифровых клавиш

В следующем примере показан способ сортировки одномерного числового массива с помощью функции ksort().

Сначала создайте файл PHP со следующим скриптом. Здесь объявлен ассоциативный массив из четырех элементов, где ключевые значения массива являются числовыми. 1 используется в качестве необязательного аргумента ksort() в сценарии, который используется для сортировки массива на основе значений числовых ключей. Затем цикл foreach используется для печати отсортированного массива.

 php
// Объявить ассоциативный массив
$items = array(89564 => "Монитор", 98765 => "Мышь", 34234 => "Принтер", 18979 => "Сканер");// Применение ksort() с необязательным значением аргумента 1
ksort($items, 1);

echo "

Отсортированные значения массива:

"; // Распечатываем значения массива после сортировки foreach($items as $key => echo " $key = $value 
"; } ?>

Вывод:

Следующий вывод появится после запуска сценария с сервера. В выходных данных отображаются ключи и значения массива после сортировки массива на основе значений числовых ключей.

Пример 3: Сортировка ассоциативного массива по естественному порядку

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

Сначала создайте файл PHP со следующим скриптом. Здесь определяется ассоциативный массив из четырех элементов, а пара “ключ-значение” содержит как символы, так и числа. 4 используется во втором аргументе ksort() для естественной сортировки. Затем цикл foreach используется для печати отсортированного массива.

 php
// Объявление ассоциативного массива
$ course = array('CSE408' => "Мультимедиа" , 'MAT201' => "Математика I" , 'CSE204' => "Алгоритмы" , 'PHY101' => "Физика I ");// Применение ksort() с необязательным значением аргумента 4
ksort($ course , 4);

echo "

Отсортированные значения массива:

"; $value) { echo " $key = $value 
"; } ?>

Вывод:

Следующий вывод появится после запуска сценария с сервера. На выходе показаны ключи и значения массива после естественной сортировки ключей массива.

Пример 4. Сортировка ассоциативного массива с учетом регистра

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

Сначала создайте файл PHP со следующим скриптом. В скрипте объявлен ассоциативный массив из пяти элементов. Ключевые значения массива содержат как строчные, так и заглавные буквы. Здесь 5 используется как значение второго аргумента ksort() для сортировки с учетом регистра. Затем цикл foreach используется для печати отсортированного массива.

 php
// Объявить ассоциативный массив
$foods = array('cake' => "$20", 'Coke' => "$2", 'burger' => "$5", 'Pizza' => "$10", 'donut' => "$2");// Применение ksort() с необязательным значением аргумента 5
ksort($foods , 5);

echo "

// Распечатываем значения массива после сортировки по foreach ($food as $key => $value) { echo " $key = $value "; } ?>

Вывод:
Следующий вывод появится после запуска сценария с сервера. В выходных данных показаны ключи и значения массива после сортировки ключей массива с учетом регистра. Ключевые значения массива – торт , кола , бургер , пицца и пончик . Заглавная буква меньше строчной буквы на основе кода ASCII. После сортировки с учетом регистра ключевыми значениями являются кока-кола , пицца , бургер , торт и пончик .

Определение и использование

Функция in_array() выполняет поиск в массиве определенного значения.

Примечание: Если параметр поиска является строкой, а параметр type имеет значение TRUE, то поиск выполняется с учетом регистра.


Синтаксис

in_array(search, array, type)

Параметр значений

Параметр Описание
search Требуемый. Указывает, что искать
array Требуемый. Задает массив поиска
type Необязательный. Если этот параметр имеет значение TRUE, функция in_array() выполняет поиск строки поиска и определенного типа в массиве.


Технические подробности

Возврат значения: Возвращает TRUE, если значение найдено в массиве, или FALSE в противном случае
PHP Версия: 4+
PHP Список изменений: PHP 4.2: параметр поиска теперь может быть в массиве

Что такое регулярные выражения

В основном работу регулярных выражений можно описать примерно следующим путем, регулярное выражение это метод сопоставления с образцом или согласующих моделей в строке. В PHP наиболее часто используется PCRE или «Perl Compatible Regular Expressions». Сегодня мы оставим простые методы поиска строк и будем работать с более сильным инструментом, которым многие пользуются но не знают как он работает. Здесь мы попытается декодировать бессмысленные иероглифы какими их все считают и сделаем это на примерах. Самая главная ошибка те кто изучает регулярные выражения это попытка понять все в один присест.

Начинаем изучение

Создайте у себя на тестовом сервере файл index.php и разместите в него код:

// create a string

$string = 'abcdefghijklmnopqrstuvwxyz0123456789';

// echo our string

echo $string;

?>

Немного модифицируем код и допишем функцию preg_match().

// create a string

$string = 'abcdefghijklmnopqrstuvwxyz0123456789';

echo preg_match("/abc/", $string);

?>

После запуска скрипта мы получим 1, а это значит что часть текста была найдена в строке $string (в PHP 1 и TRUE равные ответы).

Мы привили пример того как найти строку, но есть способ сделать это быстрее через стандартные функции php StrPos () и strstr ().

Указание начала строки в регулярном выражении

Для указания начала строки в выражении необходимо добавить значок ^, давайте будем меньше говорить и попробуем на практике изменить наш код к следующему виду:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

// create a string

$string = 'abcdefghijklmnopqrstuvwxyz0123456789';

// try to match the beginning of the string

if(preg_match("/^abc/", $string))

    {

    // если строка была найдена и условие выполняется

    echo 'Эта строка начинается с abc';

    }

else

    {

    // Если строка не найдена и условие не было выполнено

    echo 'Ничего не найдено';

    }

?>

После выполнения кода вы увидите надпись «Эта строка начинается с abc», так как наша строка действительно начинается с букв «abc». Символ (^) дает нам поиск только по началу строки, но не по всей. Эта конструкция по умолчанию учитывает регистр.

Поиск подстроки в начале без учета регистра

Раньше мы использовали комбинацию if(preg_match(«/^ABC/», $string)), но эта комбинация выдала бы ошибочный результат, так как она учитывает регистр букв. Рассмотрим PHP код который не будет учитывать регистр букв при поиске.

// создаем строку

$string = 'abcdefghijklmnopqrstuvwxyz0123456789';

// попробуем шаблон поиска

if(preg_match("/^ABC/i", $string))

        {

    // если поиск удался

        echo 'строка начинается на ABC';

        }

else

        {

        echo 'Ничего не найдено';

        }

?>

Конструкция всего немного поменялась и был добавлен еще один модификатор i preg_match(«/^ABC/i«, $string) — case insensitive (регистронезависимый). После наших поправок скрипт будет отлично находить подстроку.

Как найти строку по ее концовке

Во многом поиск строки по ее концовке похож на предыдущий пример. Все что необходимо это добавить \z к концу шаблона поиска.

// создадим строку

$string = 'abcdefghijklmnopqrstuvwxyz0123456789';

// Шаблон поиска строки по ее окончанию

if(preg_match("/89\z/i", $string))

        {

    // если наш шаблон сработает, то выведет на экран ...

        echo 'Конец строки равен 89';

        }

else

        {

    // если шаблон поиска не сработает

        echo 'Ничего не найдено';

        }

?>

Так как наша строка заканчивается на 89 и шаблон поиска соответствует концу строки, то результат будет «Конец строки равен 89».

Мета символы

Мы с вами уже использовали специальные символы такие как (^) и ($) эти символы, наряду с другими называют мета символами. Вот список мета символов которые также используются в регулярных выражениях:

. (Полная остановка)
^ (Carat) — начало строки
* (Asterix) — означает любое количество символов в строке, предшествующих «звездочке», в том числе и нулевое число символов.
+ (Plus) — указывает на то, что предыдущий символ или выражение встречается 1 или более раз. Играет ту же роль, что и символ «звездочка» (*), за исключением случая нулевого количества вхождений.
? (Question Mark) — означает, что предыдущий символ или регулярное выражение встречается 0 или 1 раз. В основном используется для поиска одиночных символов.
{ (Opening curly brace)
} (Closing curly brace) — {a,b} — количество вхождений предшествующего символа или подмаски от а до б. Если б не указан, считается, что верхней границы нет. Например, * — то же самое, что {0,}. ? — то же, что {0,1}. {5,7}5,6 или 7 повторений.
[ (Opening brace)
] (Closing brace) — предназначены для задания подмножества символов. Квадратные скобки, внутри регулярного выражения, считаются одним символом, который может принимать значения, перечисленные внутри этих скобок.
\ (Backslash) — служит для экранирования специальных символов, это означает, что экранированные символы должны интерпретироваться буквально, т.е. не как мета символы, а как простые символы.
| (Pipe) —  выполняет роль логического оператора «ИЛИ» в регулярных выражениях и служит для задания набора альтернатив ‘re(a|e)d’.
( (Opening parens)
) (Closing parens) — предназначены для выделения групп регулярных выражений. Они полезны при использовании с оператором «|» и при извлечении подстроки с помощью команды expr.

Мы рассмотрим каждый из мета символов на примерах во время этого урока, но важно, чтобы вы знали, какие они есть. Если вы хотите найти строку содержащую один из этих символов, например: «1 + 1«, то вам нужно, чтобы программа считала их обычными символами, а не мета символами, для этого добавим обратную косую черту и заэкранируем символ:

// создаем строку

$string = '1+1=2';

// пробуем использовать нашу строку

if(preg_match("/^1\+1/i", $string))

        {

    // если выражение вернуло истину

        echo 'Строка начинается с 1+1';

        }

else

        {

        echo 'Ничего не найдено';

        }

?>

В данном примере \ заэкранировал плюс и выражение использовало его как обычный символ, в противном случаи выражение сработало бы как ложное.

Рассмотрим что могут делать другие мета символы

Мы уже видели символ каретки ^ и доллар $? давайте посмотрим на другие, начиная с квадратных скобок []. Квадратые cкобки предназначены для поиска символов [abcdef] или диапазона символов [a-f]. Посмотрим на пример регулярного выражения:

// Создадим строку

$string = 'big';

// ищем подстроку в строке

echo preg_match("/b[aoiu]g/", $string, $matches);

?>

Выражение вернет истину если в строке встречаются слова big, bog, bug, bag но не beg.

Еще можно использовать вот такую комбинацию [abcdef$], в данном случаи знак $ будет всего лишь долларом но не мета символом. Практически все мета символы не имеют значения, за исключением некоторых случаев.

Давайте попробуем следующий скрипт:

// Создаем стоку string

$string = 'abcefghijklmnopqrstuvwxyz0123456789';

// обрабатываем строку и помещаем результат в виде массива в $matches

preg_match("/[^b]/", $string, $matches);

// Цикл вывода массива matches

foreach($matches as $key=>$value)

        {

        echo $key.' -> '.$value;

        }

?>

Результатом работы скрипта будет вывод 0 -> a скрипт выводит символы до символа b.

Давайте попробуем немного модифицировать наш скрипт и использовать функцию preg_match_all().

// create a string

$string = 'abcefghijklmnopqrstuvwxyz0123456789';

// try to match all characters not within out pattern

preg_match_all("/[^b]/", $string, $matches);

// loop through the matches with foreach

foreach($matches[0] as $value)

        {

        echo $value;

        }

?>

Как вы можете видеть из результатов вышеприведенного сценария, он печатает все символы строки, которые не соответствуют шаблону «B»
acefghijklmnopqrstuvwxyz0123456789.
Сделаем еще один шаг вперед для того чтобы отфильтровать все цифры со строки:

// создадим строку

$string = 'abcefghijklmnopqrstuvwxyz0123456789';

// В массив matches помещаются все символы кроме цифр от 0 до 9

preg_match_all("/[^0-9]/", $string, $matches);

// цикл вывода данных

foreach($matches[0] as $value)

        {

        echo $value;

        }

?>

Этот скрипт возвращает строку:
abcefghijklmnopqrstuvwxyz

Исходя из выше указанного кода мы можем видеть что знак ^ в приведенных выше примерах означает отрицание (Все кроме перечисленных символов).

Оставайтесь с нами, дальше еще интереснее

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

// Создаем строку

$string = 'This is a [templateVar]';

// Попробуем использовать наше регулярное выраение

preg_match_all("/[\[\]]/", $string, $matches);

// выводим результат в цикле

foreach($matches[0] as $value)

        {

        echo $value;

        }

?>

Результатом работы скрипта будет:

[]

Это потому что мы указали что хотим взять все символы которые соответствуют []. Для того чтобы выражение сработало правильно мы использовали косые черты, если вам надо чтобы косая черта расценивалась как простой символ, вам будет необходимо указать две косые черты \\, например для такого выражения c:\dir\file.php.

Рассмотрим работу с оператором точкой ( . ) на простом примере:

// создадим строку

$string = 'sex at noon taxes';

// обработаем строку по шаблону регулярного выражения

echo preg_match("/s.x/", $string, $matches);

?>

В результате мы получим 1, так как в нашей строке есть слово sex, это выражение также будет находить слова SOX, SUX и SX, но не будет находить Stix.

Давайте попробуем посчитать количество слов в строке при помощи регулярного выражения с точкой.

// создаем строку

$string = 'sex'."\n".'at'."\n".'noon'."\n".'taxes'."\n";

// Выводим строку на экран

echo nl2br($string);

// Посмотрим результат регулярного выражения (4)

echo preg_match_all("/\s/", $string, $matches);

?>

Код выше вернет это:
sex
at
noon
taxes
4

Сначала мы вывели строку, а оператор \n выставил переносы. Ниже мы видим число 4, это количество слов которое нашла функция preg_match_all ().

Давайте далее мы поработаем с мета символом ( * ). Этому оператору будет соответствовать любое количество любых символов, которые могут быть до оператора, а могут и не существовать. Посмотрим на пример ниже:

// создаем строку

$string = 'php';

// посмотрим результат выражения

echo preg_match("/ph*p/", $string, $matches);

?>

В результате мы получим 1 поскольку мы нашли 1 выражение которое соответствует выражению. Также верным будет выражение pp (без символов) и phhhp (с несколькими символами).

Если нам необходимо исключить пустой результат вида pp, то можно использовать мета символ ( + ). Посмотрим на примере:

// создаем строку

$string = 'pp';

// получаем результат регулярного выражения

echo preg_match("/ph+p/", $string, $matches);

?>

Использование символа ( + ) работает похоже на ( * ), но плюс не учитывает пустое значение.

Наш следующий мета символ знак вопроса ( ? ), он означает что предыдущий символ может быть, а может и не быть. Примером может быть написание номера телефона, оба выражения будут истиной (1234-5678) и (12345678).

// создаем строку

$string = '12345678';

// возвращает 1

echo preg_match("/1234-?5678/", $string, $matches);

?>

Аналогичный результат будет при использовании следующего кода:

// create a string

$string = '1234-5678';

// look for a match

echo preg_match("/1234-?5678/", $string, $matches);

?>

Далее у нас есть фигурные скобки или {} метасимволы. Задают число вхождений предыдущего выражения или диапазона. Фигурные скобки обязательно должны экранироваться косой чертой «[0-9]\{5\}».
Выражение «[0-9]\{5\}» — в соответствует подстроке из пяти десятичных цифр (символов из диапазона от 0 до 9, включительно).

Далее мы будем использовать выражение в котором после текста «PHP» обязательно должны дополнятся ровно 3 цифрами.

// создаем строку

$string = 'PHP123';

// посмотрим на результат

echo preg_match("/PHP[0-9]{3}/", $string, $matches);

?>

Результатом регулярного выражения будет истина (1). Из регулярного выражения видно что оно должно начинаться текстом PHP и дополняться тремя цифрами от 0 до 9.

Специальные Последовательности

Обратная косая черта также используется для специальных последовательностей. Давайте разберемся каковы бывают последовательности?

  • \d — выражает любые цифровые символы подобно выражению [0-9]
  • \D — соответствует любым цифровым символам подобно [^0-9]
  • \s — соответствует любым символам вида [ \t\n\r\f\v]
  • \S — соответствует любому символу вида [^ \t\n\r\f\v]
  • \w — соответствует любым алфавитно цифровым символам и символу нижнего подчеркивания подобно [a-zA-Z0-9_]
  • \W — оответствует любым алфавитно цифровым символам и символу нижнего подчеркивания подобно [^a-zA-Z0-9_]

Эти последовательности можно использовать для сокращения ваших регулярных выражений. Следующий пример показывает как можно очистить строку от лишних символов.

// создаем строку

$string = 'ab-ce*fg@ hi & jkl(mnopqr)stu+vw?x yz0>1234;

// выполняем регулярное выражение

preg_match_all("/[\w]/", $string, $matches);

// выводим результат выражения

foreach($matches[0] as $value)

        {

        echo $value;

        }

?>

Такое выражение будет полезно если вам нужно почистить логин пользователя, от лишних и недопустимых символов.

Также при чистке строки часто необходимо удостовериться, что строка не начинается из цифр, это можно сделать при помощи следующего примера:

// создаем строку

$string = '2 bad for perl';

// Проверяем строку на наличие цифры в начале

if(preg_match("/^\d/", $string))

    {

    echo 'Стока начинается из цифр';

    }

else

    {

    echo 'В начале строки нет цифр';

    }                                                                                                      

?>

Этот пример покажет что в строке вначале строит цифра 2.

Давайте воспользуемся точкой чтобы определить есть ли в строке хотя бы один символ.

// create a string

$string = 'abcdefghijklmnopqrstuvwxyz0123456789';

// try to match any character

if(preg_match("/./", $string))

        {

        echo 'Строка содержит хотя бы один символ';

        }

else

        {

        echo 'Строка несодержит ниодного символа';

        }

?>

Точка ( . ) означает любого символа, не менее одного, за исключением символа перевода строки (\n).

Попробуем использовать последовательность \s для получения количества слов в строке разделенной \n.

// создаем строку

$string = 'sex'."\n".'at'."\n".'noon'."\n".'taxes'."\n";

// выводим строку

echo nl2br($string);

// смотрим на результат выражения

echo preg_match_all("/\s/", $string, $matches);

?>

Результат выражения:

sex
at
noon
taxes
4

Подытожим наши знания

Начнем сочетать наши выражения в более сложный вид. Следующее выражение показывает что в строке должно быть одно из слов This или That или There.

// пример строки

$string = "This is a Hello World script";

// Находит в строке одby из шаблонов This или That или There

echo preg_match("/^(This|That|There)/", $string);

?>

Еще один интересный пример скрипта для определения начала слова.

// присваиваем переменной строку

$string = "This is a Hello World script";

// попробуем задействовать шаблон выражеия Jello или Hello

if(!preg_match("/(Je|He)llo/", $string))

        {

        echo 'Pattern not found';

        }

else

        {

        echo 'pattern found';

        }

?>

Давайте еще дополним напечатанный выше код, чтобы мы могли увидеть с каких именно символов начинается слово и выведем эти символы и само слово на экран:

// создаем строку

$string = "This is a Hello World script";

// проверяем шаблон выражения Jello или Hello

// записываем результат обработки регулярного выражения в массив matches

preg_match("/(Je|He)llo/", $string, $matches);

// выводим полученный массив matches на экран при помощи цикла

foreach($matches as $key=>$value)

    {

    echo $key.'->'.$value.'
'
;

    }

?>

Если вы все сделали правильно, то результатом выражения будет:

0->Hello
1->He

$matches[0] содержит полный текст шаблона выражения — Hello.
$matches[1] содержит первую часть шаблона выражения.

Модификаторы и утверждения

Как мы видели ранее в этом уроке мы смогли создать регулярное выражение, которое было чувствительно к регистру с использованием /i . Это модификатор и является одним из многих используемых в регулярных выражениях для выполнения изменений в поведении сопоставления с образцом. Вот список из модификаторов и утверждений регулярных выражений, используемых в PHP.

Модификаторы

i — регистронезависимость.
U — инвертирует жадность. это значит, что шаблон совпадет с наибольшим возможным количеством символов, попадающих под этот шаблон.
s — если используется, то символ . соответствует и переводу строки \n. Иначе она ему не соответствует.
m — мультистрока (Multiple lines)
x — заставляет игнорировать все неэкранированные пробельные символы, если они не перечислены в символьном классе. Удобно, когда энтерами и пробелами вы хотите навести удобночитаемость в регулярке.
e — Если используется данный модификатор, preg_replace() после выполнения стандартных подстановок в заменяемой строке интерпретирует ее как PHP-код и использует результат для замены искомой строки. Одинарные и двойные кавычки, обратные слэши (\) NULL-символы будут проэкранированы обратными слэшами в подставляемых обратных ссылках. (Работает только с preg_replace).
S — в случае, если планируется многократно использовать шаблон, имеет смысл потратить немного больше времени на его анализ, чтобы уменьшить время его выполнения. В случае, если данный модификатор используется, проводится дополнительный анализ шаблона. В настоящем это имеет смысл только для «незаякоренных» шаблонов, не начинающихся с какого-либо определенного символа. Об этом чуть позднее.

Утверждения

b — Word Boundry (граница слова)
Граница слова создается между двух «\b» модификаторов.
Это специальный «подпирающий тип модификаторов, которые позволяют указть ТОЧНОЕ совпадение.
Текст должен совпасть только с точным шаблоном заключенным в «\b»
Например, шаблон «cat» не совпадет с «catalog».
B — Not a word boundary (не является границей слова)
Этот модификатор относится к предыдущем, но \B не ставит условия гранц слова, а наоборот отрицает границу слов. Этот модификатор полезен, когда нужно найти что-нибудь внутри текста, который находится внутри слова, но не в самом начале или конце фразы.
A — PCRE_ANCHORED
Если используется данный модификатор, соответствие шаблону будет достигаться только в том случае, если он «заякорен», т.е. соответствует началу строки, в которой производится поиск. Того же эффекта можно достичь подходящей конструкцией с вложенным шаблоном, которая является единственным способом реализации этого поведения в Perl.
Z — указание конца строки.
конец данных либо позиция перед последним переводом строки (независимо от многострочного режима).
z — указание конца строки.
конец данных (независимо от многострочного режима).
G — первая совпадающая позиция в строке.

Поработаем с модификаторами и утверждениями на примерах

Как вы можете видеть из приведенного выше списка, есть много способов, чтобы изменить поведение регулярных выражений, давайте попробуем поработать с модификаторами и утверждениями по очереди на простых примерах.

Модификатор (i)

// создаем строку

$string = 'abcdefghijklmnopqrstuvwxyz0123456789';

// создадим новое регулярное выражение

if(preg_match("/^ABC/i", $string))

{

echo 'Строка начинается с abc';

}

else

{

echo 'Ничего не найдено';

}

?>

Если вы читали предыдущие части этого урока не будет никакого удивления, что данная конструкция посчитала похожими «ABC» и  с abc, потому что мы использовали модификатор регистронезависимости (i) .

Модификатор (s)

Продолжим изучение и рассмотрим модификатор (s). Если используется данный модификатор, то символ ( . ) соответствует и переводу строки \n. Иначе она ему не соответствует. Сначала мы попробуем пример без модификатора (s).

    // создаем строку для выражения

    $string = 'sex'."\n".'at'."\n".'noon'."\n".'taxes'."\n";

    // обрабатываем строку

    echo preg_match("/sex.at.noon/", $string, $matches);

?>

Как видим этот пример вернул ответ ( 0 ), для того чтобы  результат был положительный ( 1 ), а символ ( . ) учитывал \n, необходимо добавить в выражение модификатор ( s )? перестроим наш пример.

    // создадим строку

    $string = 'sex'."\n".'at'."\n".'noon'."\n".'taxes'."\n";

    // обрабатываем строку при помощи выражения

    echo preg_match("/sex.at.noon/s", $string, $matches);

?>

Приведенный выше код будет отображать число 1, так как строка по шаблону выражения была найдена.

Модификатор (m)

При добавления модификатора к строке, будет происходить интересная магия. Регулярное выражение будет воспринимать одну строку как несколько, если в ней стоит перенос \n. Для того чтобы было проще понять действие модификатора посмотрите на пример.

// создаем строку

$string = 'sex'."\n".'at'."\n".'noon'."\n".'taxes'."\n";

// проверяем результат

if(preg_match("/^noon/im", $string))

{

echo 'Шаблон найден';

}

else

{

echo 'Шаблон ненайден';

}

?>

В данном примере мы при помощи мета символа ( ^ ) ищем слово noon в начале строки. Наша строка начинается с слова sex, а значит в обычном случае мы бы не нашли искомое слово. Так как в нашем примере все слова разделены \n и стоит модификатор ( m ), то каждое слово будет восприниматься как начало строки. Чтобы при поиске не учитывался регистр букв мы еще добавили модификатор ( i ). Если посмотрите внимательно на пример выше, то увидите что можно использовать несколько модификаторов рядом стоящих.

Модификатор ( x ) делает наше выражение длиннее но он позволяет делить регулярное выражение на несколько строк и дает возможность прокомментировать каждое действие в выражении, комментарии в регулярных выражениях делают их понятнее. Дальше описывать нет смысла, просто посмотрите как будет работать вот такое регулярное выражение, оно работает как и предыдущее но имеет комментарии и моификаторы ( imx ).

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

// создаем строку

$string = 'sex'."\n".'at'."\n".'noon'."\n".'taxes'."\n";

// шаблон поиска регулярного выражения с комментариями и модификатором (x)

$regex ='

/     # opening double quote

^     # caret means beginning of the string

noon  # the pattern to match

/imx

';

// Проверка результата

if(preg_match($regex, $string))

        {

        echo 'Шаблон найден';

        }

else

        {

        echo 'Шаблон ненайден';

        }

?>

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

Рассмотрим пример множественного вхождения (совпадения):

// создаем строку

$string = 'ab-ce*fg@ hi & jkl(mnopqr)stu+vw?x yz0>1234;

// проверка соответствия регулярного выражения

preg_match_all("/[\w]/S", $string, $matches);

// вывод совпадений с шаблоном в цикле

foreach($matches[0] as $value)

        {

        echo $value;

        }

?>

Модификатор ( S ) используют редко, но вдруг он вам встретиться вы будете знать для чего он нужен, или знать где можно почитать об этом модификаторе.

Далее мы поработаем с границами слов \b, этот модификатор позволяет нам четко определить где начинается и заканчивается слово. Частая ошибка программистов в использовании этого модификатора для поиска вхождения. Поиск вхождения с \b вернет результат false. Рассмотрим на примере:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

/*** a simple string ***/

$string = 'eregi will not be available in PHP 6';

/*** here we will try match the string "lab" ***/

if(preg_match ("/\blab\b/i", $string))

        {

    /*** if we get a match ***/

        echo $string;

        }

else

        {

    /*** if no match is found ***/

        echo 'No match found';

        }

?>

Искомое слово lab не было найдено в слове available из за использования \b в шаблоне. Для модификатора \b в поиске, слова cat и catalog будут разными словами.

Рассмотрим еще один пример поиска выражения:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

/*** создаем строку ***/

$string = 'eregi will remain in the computer lab';

/*** проверяем строку на слово "lab" ***/

if(preg_match ("/\blab\b/i", $string))

        {

    /*** если получили результат true, выводим строку ***/

        echo $string;

        }

else

        {

    /*** если ничего не найдено, выводим false ***/

        echo 'Ничего не было найдено';

        }

?>

Поиск удался!

Модификатор \B

/*** создаем строку ***/

$string = 'This lathe turns wood.';

/*** проверяем границу слова ***/

if(preg_match("/\Bthe\b/", $string))

    {

    /*** если граница слова найдена ***/

    echo 'Граница слова найдена "the".';

    }

else

    {

    /*** если не было ничего найдено ***/

    echo 'Ничего не нашли';

    }

?>

Этот модификатор (\B) отрицает границу слова. Модификатор будет полезен в случаи когда необходимо найти что-нибудь внутри текста, по шаблону который находится внутри слова, но не в самом начале или конце фразы.

Пример со словом которое начинается заданным вхождением

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

/*** a little string ***/

$string = 'The quick brown fox jumps over the lazy dog.';

/*** match word boundary and non-word boundary ***/

if(preg_match("/\Bthe\b/", $string))

    {

    /*** if we match the pattern ***/

    echo 'Matched the pattern "the".';

    }

else

    {

    /*** if no match is found ***/

    echo 'No match found';

    }

?>

На примере вам должно быть понятно почему слово «the» не было найдено, все потому что мы при помощи регулярного выражения «/\Bthe\b/» указали что «the» это конец слова, но не целое слово.

Модификатор \U используется для инвертирования жадности.

Этот модификатор инвертирует жадность квантификаторов, таким образом они по умолчанию не жадные. Но становятся жадными, если за ними следует символ ?. Его также можно установить с помощью (?U) установки модификатора внутри шаблона или добавив знак вопроса после квантификатора (например, .*?).

Пример использования жадных и ленивых выражений из wikipedia

Выражение (<.>) соответствует строке, содержащей несколько тегов HTML-разметки, целиком.

wp-admin.com.ua — уроки разработки сайтов и cms wordpress


Чтобы выделить отдельные теги, можно применить ленивую версию этого выражения: (<.>) Ей соответствует не вся показанная выше строка, а отдельные теги (выделены цветом):

wp-admin.com.ua

— уроки разработки сайтов и cms wordpress

Инициализация

Вернуть экземпляр класса

$utf = \UTF::instance();

Класс UTF использует фабричную оболочку Prefab , поэтому вы можете получить один и тот же экземпляр этого класса в любой точке вашего кода.