Php работа со строкой как с массивом
Перейти к содержимому

Php работа со строкой как с массивом

  • автор:

Обработка строк через преобразование в массив — PHP: Массивы

Решить её можно множеством способов. Чем больше называет человек — тем лучше. К ним относятся:

  1. Посимвольный перебор строки. Эта задачка может быть решена двумя способами. Один из которых связан с использованием конечных автоматов, которым будет посвящён отдельный курс впереди.
  2. Регулярные выражения. Про них также есть отдельный курс.
  3. Через преобразование строки в массив слов.

Рассмотрим последний способ. Первым делом нужно превратить строку в массив. Для этого мы воспользуемся функцией explode() , которая разделяет строку, используя указанный разделитель. В нашем случае разделителем является пробел.

 function capitalizeWords($sentence)  $words = explode(' ', $sentence); // . > 

Теперь, используя цикл, легко выполнить операцию capitalize, то есть приведение первой буквы каждого слова к верхнему регистру.

 function capitalizeWords($sentence)  $words = explode(' ', $sentence); $capitalizedWords = []; foreach ($words as $word)  $capitalizedWords[] = ucfirst($word); > // . > 

Последнее действие обратно первому. Нужно соединить слова и вернуть получившуюся строку наружу. Для соединения элементов массива в PHP используется функция implode() . Она, как и explode() , принимает на вход разделитель, который теперь используется для сборки строки.

 function capitalizeWords($sentence)  $words = explode(' ', $sentence); $capitalizedWords = []; foreach ($words as $word)  $capitalizedWords[] = ucfirst($word); > return implode(' ', $capitalizedWords); > $greeting = 'hello from Malasia'; print_r(capitalizeWords($greeting)); // => Hello From Malasia 

В случае, если строчку нужно разбить по символам, а не по словам, можно воспользоваться функцией mb_str_split() :

 $chars = mb_str_split($text); foreach ($chars as $char)  print_r($char); > 

mb_str_split() принимает второй параметр, в котором можно указать количество символов в каждой группе (элементе получившегося массива). По умолчанию используется число 1, поэтому мы получаем массив, в котором каждый элемент — один символ. Но, если указать, например, 3, то в каждом элементе массива будет по три символа.

 $text = 'Hello Friend'; $parts = mb_str_split($text, 3); print_r($parts); // => Array // => ( // => [0] => Hel // => [1] => lo // => [2] => Fri 

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

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

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов

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

Php работа со строкой как с массивом

Строки играют большую роль, задачи на парсинг строк довольно часто встречаются в PHP , поэтому рассмотрим некоторые базовые функции работы со строками.

Строки представляют некоторый текст, который заключен в одинарные или двойные кавычки:

$str1 = "Hello"; $str2 = 'Welcome';

Но также PHP позволяет определить строку и без кавычек с помощью оператора

В данном случае «LABEL» — это название метки, которая указывает на начало и конец строки. Название метки произвольное. То есть все, что расположено между

Hello World! Bye World..

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

$name = "Tom"; $age = 36; $s = 

Обращение к символам строки

PHP позволяет обращаться к отдельным символам строки как к элементам массива по числовому индексу:

$str = "Hello Tom"; echo $str[0];// получим первый символ - H $str[1] = "i"; // поменяем второй символ echo "
" . $str . "
"; // Hillo Tom

Индексация символов, как и в массиве, начинается с нуля.

Специальные функции и расширение mbstring

Кроме некоторых базовых возможностей по работе со строками PHP также предоставляет ряд специальных функций. Для некоторых из них требуется подключить специальное расширение - mbstring.dll . Для подключения этого расширения откроем файл конфигурации PHP - php.ini и найдем в нем следующую строку:

;extension=mbstring

Раскомментируем ее, убрав точку с запятой.

extension=mbstring

Также убедимся, что у нас указан путь к папке расширений.

Найдем в файле php.ini строку:

;extension_dir = "ext"

Эта строка указывает на каталог с подключаемыми расширениями для PHP. По умолчанию все расширения располагаются в папке ext . Раскомментируем эту строку, убрав точку с запятой, и укажем полный путь к папке ext . Так, в моем случае папка c php расположена в корне диска C (ОС Windows), соответственно я указываю путь "C:\php\ext":

extension_dir = "C:\php\ext"

И так как у нас файл php.ini изменился, перезапустим веб-сервер Apache.

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

Функции strpos() и mb_strpos()

Функция strpos($str, $search) возвращает позицию подстроки или символа $search в строке $str или значение false , если строка $str не содержит подстроки $search:

$input = "This is the end"; $search = "is"; $position = strpos($input, $search); // 2 if($position!==false)

При использовании этой функции надо учитывать, что индексация символов в строке начинается с нуля, поэтому позиция символа "T" будет равна 0. Поэтому сравнение $position!=false будет работать некорректно, ведь false и 0 при сравнении и приведении к общему типу будут представлять одно и то же значение. Поэтому в данном случае корректно использовать только операцию эквивалентности: $position!==false или $position===false .

Теперь применим функцию на другом примере:

$input = "Мама мыла раму"; $search = "мы"; $position = strpos($input, $search); // 9

Неожиданно, но результатом функции будет число 9. Хотя мы видим, что истинная позиция подстроки "мы" в исходной строке равна 5.

Все дело в том, что некоторые строковые функции не всегда корректно обрабатывают кириллические символы, и для них лучше использовать другую функцию - mb_strpos() :

$position = mb_strpos($input, $search); // 5

Функция strrpos()

Функция strrpos() во многом аналогична функции strpos() , только ищет позицию не первого, а последнего вхождения подстроки в строку:

$input = "This is the end"; $search = "is"; $position = strrpos($input, $search); // 5

Но опять же данная функция не совсем корректно работает с кириллическими символами, поэтому нам надо использовать ее аналог - mb_strrpos() :

$position = mb_strrpos($input, $search);

Функция trim()

Функция trim($str) удаляет из строки начальные и конечные пробелы, а также управляющие символы \n, \r, \t:

$input = " Мама мыла раму "; $input = trim($input);

Изменение регистра

Для перевода строки в нижний регистр используется функция strtolower :

$input = "The World is Mine"; $input = strtolower($input);

Для перевода в нижний регистр строки с кириллическими символами можно использовать функцию mb_strtolower :

$input = mb_strtolower($input);

Для перевода строки в верхний регистр примеяются функции strtoupper() / mb_ strtoupper() , которые работают аналогично.

Функция strlen()

Функция strlen() возвращает длину строки, то есть количество символов в ней:

$input = "Hello world"; $num = strlen($input); echo $num;

Функция strlen() также некорректно работает с кириллицей, поэтому в этом случае лучше применять функцию mb_strlen() :

$input = "Мама мыла раму"; $num = mb_strlen($input); echo $num;

Получение подстроки

Применяя функцию substr($str, $start [, $length]) , можно получить из одной строки ее определенную часть. Данная функция обрезает строку $str, начиная c символа в позиции $start до конца строки. С помощью дополнительного необязательного параметра $length можно задать количество вырезаемых символов.

$input = "The world is mine!"; $subinput1 = substr($input, 2); $subinput2 = substr($input, 2, 6); echo $subinput1; echo "
"; echo $subinput2;

Так как данная функция некорректно работает с кириллицей, то вместо нее следует применять функцию mb_substr() , которая действует аналогично:

$input = "Мама мыла раму"; $subinput1 = mb_substr($input, 2); $subinput2 = mb_substr($input, 2, 6);

Замена подстрок

Для замены определенной части строки применяется функция str_replace($old, $new, $input) . Эта функция заменяет в строке $input все вхождения подстроки $old на подстроку $new с учетом регистра:

$input = "Мама мыла раму"; $input = str_replace("мы", "ши", $input); echo $input;

explode

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

Список параметров

Если аргумент limit является положительным, возвращаемый массив будет содержать максимум limit элементов, при этом последний элемент будет содержать остаток строки string .

Если параметр limit отрицателен, то будут возвращены все компоненты, кроме последних - limit .

Если limit равен нулю, то он расценивается как 1.

Замечание:

До PHP 8.0 функция implode() принимала параметры в любом порядке. Функция explode() никогда этого не поддерживала: убедитесь в том, что separator указан перед аргументом string .

Возвращаемые значения

Возвращает массив ( array ) строк ( string ), созданный делением параметра string по границам, указанным параметром separator .

Если separator является пустой строкой (""), explode() выбрасывает ValueError . Если separator не содержится в string , и используется отрицательный limit , то будет возвращён пустой массив ( array ), иначе будет возвращён массив, содержащий string . Если значения separator появляются в начале или в конце string , указанные значения будут добавлены как пустое значение массива ( array ), либо в первой, либо в последней позиции возвращённого массива ( array ) соответственно.

Список изменений

Версия Описание
8.0.0 explode() теперь выбрасывает TypeError , если параметр separator является пустой строкой ( "" ). Ранее вместо исключения explode() возвращала false .

Примеры

Пример #1 Пример использования explode()

// Пример 1
$pizza = "кусок1 кусок2 кусок3 кусок4 кусок5 кусок6" ;
$pieces = explode ( " " , $pizza );
echo $pieces [ 0 ]; // кусок1
echo $pieces [ 1 ]; // кусок2

// Пример 2
$data = "foo:*:1023:1000::/home/foo:/bin/sh" ;
list( $user , $pass , $uid , $gid , $gecos , $home , $shell ) = explode ( ":" , $data );
echo $user ; // foo
echo $pass ; // *

Пример #2 Пример возвращаемого значения explode()

/*
Строка, которая не содержит разделителя, будет
просто возвращать массив с одним значением оригинальной строки.
*/
$input1 = "hello" ;
$input2 = "hello,there" ;
$input3 = ',' ;
var_dump ( explode ( ',' , $input1 ) );
var_dump ( explode ( ',' , $input2 ) );
var_dump ( explode ( ',' , $input3 ) );

Результат выполнения данного примера:

array(1) ( [0] => string(5) "hello" ) array(2) ( [0] => string(5) "hello" [1] => string(5) "there" ) array(2) ( [0] => string(0) "" [1] => string(0) "" )

Пример #3 Примеры с использованием параметра limit

// положительный лимит
print_r ( explode ( '|' , $str , 2 ));

// отрицательный лимит
print_r ( explode ( '|' , $str , - 1 ));
?>

Результат выполнения данного примера:

Array ( [0] => один [1] => два|три|четыре ) Array ( [0] => один [1] => два [2] => три )

Примечания

Замечание: Эта функция безопасна для обработки данных в двоичной форме.

Смотрите также

  • preg_split() - Разбивает строку по регулярному выражению
  • str_split() - Преобразует строку в массив
  • mb_split() - Разделение строк в многобайтных кодировках, используя регулярное выражение
  • str_word_count() - Возвращает информацию о словах, входящих в строку
  • strtok() - Разбивает строку на токены
  • implode() - Объединяет элементы массива в строку

User Contributed Notes 3 notes

1 year ago

Note that an empty input string will still result in one element in the output array. This is something to remember when you are processing unknown input.

For example, maybe you are splitting part of a URI by forward slashes (like "articles/42/show" => ["articles", "42", "show"]). And maybe you expect that an empty URI will result in an empty array ("" => []). Instead, it will contain one element, with an empty string:

$uri = '' ;
$parts = explode ( '/' , $uri );
var_dump ( $parts );

2 years ago

Be careful, while most non-alphanumeric data types as input strings return an array with an empty string when used with a valid separator, true returns an array with the string "1"!

var_dump(explode(',', null)); //array(1) < [0]=>string(0) "" >
var_dump(explode(',', false)); //array(1) < [0]=>string(0) "" >

var_dump(explode(',', true)); //array(1) < [0]=>string(1) "1" >

1 year ago

If you want to directly take a specific value without having to store it in another variable, you can implement the following:

echo $status_only = explode('-', $status)[0];

  • Copyright © 2001-2023 The PHP Group
  • My PHP.net
  • Contact
  • Other PHP.net sites
  • Privacy policy

Преобразование строк в массив и наоборот на PHP

Преобразование строк в массив и наоборот на PHP

Как преобразовать на php массив в строку с разделителями?

В разработке сайтов на PHP часто нужно сделать из массива строку разделенную например запятыми, в основном такие строки используются для формирования JS кода на PHP
Для в php существует функция implode которая объединяет элементы простого одномерного массива в строку с разделителями указанными в 1-м параметре функции implode

implode($separate, $array)

implode - возвращает строку, полученную путем объединения строковых элементов массива $array, со вставкой строки $separate между соседними элементами.
Функция implode безопасна для обработки данных в двоичной форме.
Пример работы implode:

php implode для вложенных массивов

Если передать в функцию implode в качестве параметра многомерный массив, то результат выдаст ошибку "Array to string conversion". Чтобы избежать такой ситуации используйте решение для функции implode в виде рекурсивного вызова

Также в обратном порядке преобразовать строку с разделителями в массим можно функцией explode, которая возвращает одномерный массив, полученный путем разбиения строки по указанному разделителю
Пример использования php функции explode:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *