Как из строки сделать массив 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); > // . > 

Последнее действие обратно первому — нужно соединить слова и вернуть получившуюся строку наружу. Чтобы соединить элементы массива, воспользуемся функцией 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() принимает второй параметр, в котором можно указать количество символов в каждой группе (в каждом элементе получившегося массива). Значение по умолчанию равно единице, поэтому мы получаем массив, в котором каждый элемент — это один символ. Например, если мы захотим указать число 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 студентов

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

str_split

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

Ошибки

Если параметр length меньше 1 , будет выброшена ошибка ValueError .

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

Версия Описание
8.2.0 Если параметр string не задан, теперь возвращается пустой массив ( array ). Ранее возвращался массив ( array ), содержащий одну пустую строку
8.0.0 Теперь если параметр length меньше 1 , будет выброшена ошибка ValueError ; ранее, вместо этого выдавалась ошибка уровня E_WARNING , а функция возвращала false .

Примеры

Пример #1 Пример использования функции str_split()

$str = «Hello Friend» ;

$arr1 = str_split ( $str );
$arr2 = str_split ( $str , 3 );

print_r ( $arr1 );
print_r ( $arr2 );

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

Array ( [0] => H [1] => e [2] => l [3] => l [4] => o [5] => [6] => F [7] => r [8] => i [9] => e [10] => n [11] => d ) Array ( [0] => Hel [1] => lo [2] => Fri [3] => end )

Примечания

Замечание:

Функция str_split() производит разбивку по байтам, а не по символам, в случае использования строк в многобайтных кодировках. Используйте функцию mb_str_split() , чтобы разбить строку на кодовые точки.

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

  • mb_str_split() — Возвращает массив символов заданной многобайтовой строки
  • chunk_split() — Разбивает строку на фрагменты
  • preg_split() — Разбивает строку по регулярному выражению
  • explode() — Разбивает строку с помощью разделителя
  • count_chars() — Возвращает информацию о символах, входящих в строку
  • str_word_count() — Возвращает информацию о словах, входящих в строку
  • for

User Contributed Notes 3 notes

11 months ago

The function str_split() is not ‘aware’ of words. Here is an adaptation of str_split() that is ‘word-aware’.

$array = str_split_word_aware (
‘In the beginning God created the heaven and the earth. And the earth was without form, and void; and darkness was upon the face of the deep.’ ,
32
);

/**
* This function is similar to str_split() but this function keeps words intact; it never splits through a word.
*
* @return array
*/
function str_split_word_aware ( string $string , int $maxLengthOfLine ): array
if ( $maxLengthOfLine <= 0 ) throw new RuntimeException ( sprintf ( 'The function %s() must have a max length of line at least greater than one' , __FUNCTION__ ));
>

$lines = [];
$words = explode ( ‘ ‘ , $string );

$currentLine = » ;
$lineAccumulator = » ;
foreach ( $words as $currentWord )

$currentWordWithSpace = sprintf ( ‘%s ‘ , $currentWord );
$lineAccumulator .= $currentWordWithSpace ;
if ( strlen ( $lineAccumulator ) < $maxLengthOfLine ) $currentLine = $lineAccumulator ;
continue;
>

// Overwrite the current line and accumulator with the current word
$currentLine = $currentWordWithSpace ;
$lineAccumulator = $currentWordWithSpace ;
>

if ( $currentLine !== » ) $lines [] = $currentLine ;
>

array( 5 ) [ 0 ]=> string ( 29 ) «In the beginning God created »
[ 1 ]=> string ( 30 ) «the heaven and the earth. And »
[ 2 ]=> string ( 28 ) «the earth was without form, »
[ 3 ]=> string ( 27 ) «and void; and darkness was »
[ 4 ]=> string ( 27 ) «upon the face of the deep. »
>

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

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

Разделить текст по переносам строк

$text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin blandit magna eu tempus ullamcorper. Sed porta justo sed nibh elementum condimentum. Quisque non eros sit amet elit commodo maximus eget a eros."; $array = explode("\n", $text); print_r($array);
Результат:
Array ( [0] => Lorem ipsum dolor sit amet, consectetur adipiscing elit. [1] => Proin blandit magna eu tempus ullamcorper. [2] => Sed porta justo sed nibh elementum condimentum. [3] => Quisque non eros sit amet elit commodo maximus eget a eros. )

Разделить текст по предложениям

$text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin blandit magna eu tempus ullamcorper! Sed porta justo sed nibh elementum condimentum. Quisque non eros sit amet elit commodo maximus eget a eros?"; $text = str_replace("\n", '', $text); $array = preg_split('/(?<=[. ])\s+(?=[a-zа-яё])/i', $text); print_r($array);
Результат:
Array ( [0] => Lorem ipsum dolor sit amet, consectetur adipiscing elit. [1] => Proin blandit magna eu tempus ullamcorper! [2] => Sed porta justo sed nibh elementum condimentum. [3] => Quisque non eros sit amet elit commodo maximus eget a eros? )

Разделить текст по словам

$text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin blandit magna eu tempus ullamcorper."; $text = preg_replace("/[^a-zа-яё0-9\s]/i", '', $text); $array = preg_split('/(\s)/', $text); $array = array_diff($array, array('')); print_r($array);
Результат:
Array ( [0] => Lorem [1] => ipsum [2] => dolor [3] => sit [4] => amet [5] => consectetur [6] => adipiscing [7] => elit [8] => Proin [9] => blandit [10] => magna [11] => eu [12] => tempus [13] => ullamcorper )

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

$text = "Lorem ipsum dolor sit amet"; $array = str_split($text); print_r($array);
Результат:
Array ( [0] => L [1] => o [2] => r [3] => e [4] => m [5] => [6] => i [7] => p [8] => s [9] => u [10] => m [11] => [12] => d [13] => o [14] => l [15] => o [16] => r [17] => [18] => s [19] => i [20] => t [21] => [22] => a [23] => m [24] => e [25] => t )

Разделить текст по нескольким разделителям

$text = "Lorem ipsum dolor sit amet-proin blandit magna eu:Sed porta justo."; $array = preg_split('/[-|:]/u', $text, -1, PREG_SPLIT_NO_EMPTY); print_r($array);
Результат:
Array ( [0] => Lorem ipsum dolor sit amet [1] => proin blandit magna eu [2] => Sed porta justo. )

Если разделитель из нескольких символов, например
и
:

$text = "Lorem ipsum dolor sit amet,
proin blandit magna eu.
Sed porta justo."; $array = preg_split('/(
)|()/u', $text, -1, PREG_SPLIT_NO_EMPTY); print_r($array);
Результат:
Array ( [0] => Lorem ipsum dolor sit amet, [1] => proin blandit magna eu. [2] => Sed porta justo. )

Разделить текст на равные части

$text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin blandit magna eu tempus ullamcorper."; $chunks = 10; $array = str_split($text); $chunks = array_chunk($array, $chunks, false); $result = array(); foreach ($chunks as $chunk) < $result[] = implode($chunk); >print_r($result);
Результат:
Array ( [0] => Lorem ipsu [1] => m dolor si [2] => t amet, co [3] => nsectetur [4] => adipiscing [5] => elit. Pro [6] => in blandit [7] => magna eu [8] => tempus ull [9] => amcorper. )

27.12.2020, обновлено 05.04.2022

implode

Альтернативная сигнатура (не поддерживается с именованными аргументами):

implode ( array $array ): string

Устаревшая сигнатура (устарела с PHP 7.4.0, удалена в PHP 8.0.0):

implode ( array $array , string $separator ): string

Объединяет элементы массива с помощью строки separator .

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

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

Массив объединяемых строк.

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

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

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

Версия Описание
8.0.0 Передача separator после array больше не поддерживается.
7.4.0 Передача separator после array (т.е. использование недокументированного порядка параметров) устарела.

Примеры

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

$array = [ 'имя' , 'почта' , 'телефон' ];
var_dump ( implode ( "," , $array )); // string(32) "имя,почта,телефон"

// Пустая строка при использовании пустого массива:
var_dump ( implode ( 'привет' , [])); // string(0) ""

// Параметр separator не обязателен:
var_dump ( implode ([ 'a' , 'b' , 'c' ])); // string(3) "abc"

Примечания

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

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

  • explode() - Разбивает строку с помощью разделителя
  • preg_split() - Разбивает строку по регулярному выражению
  • http_build_query() - Генерирует URL-кодированную строку запроса

User Contributed Notes 14 notes

14 years ago

it should be noted that an array with one or no elements works fine. for example:

$a1 = array( "1" , "2" , "3" );
$a2 = array( "a" );
$a3 = array();

echo "a1 is: '" . implode ( "','" , $a1 ). "'
" ;
echo "a2 is: '" . implode ( "','" , $a2 ). "'
" ;
echo "a3 is: '" . implode ( "','" , $a3 ). "'
" ;
?>

will produce:
===========
a1 is: '1','2','3'
a2 is: 'a'
a3 is: ''

5 years ago

It's not obvious from the samples, if/how associative arrays are handled. The "implode" function acts on the array "values", disregarding any keys:

declare( strict_types = 1 );

$a = array( 'one' , 'two' , 'three' );
$b = array( '1st' => 'four' , 'five' , '3rd' => 'six' );

echo implode ( ',' , $a ), '/' , implode ( ',' , $b );
?>

outputs:
one,two,three/four,five,six

10 years ago

Can also be used for building tags or complex lists, like the following:

$elements = array( 'a' , 'b' , 'c' );

  • " . implode ( "
  • " , $elements ) . "

?>

This is just an example, you can create a lot more just finding the right glue! 😉

7 years ago

It might be worthwhile noting that the array supplied to implode() can contain objects, provided the objects implement the __toString() method.

class Foo
protected $title ;

public function __construct ( $title )
$this -> title = $title ;
>

public function __toString ()
return $this -> title ;
>
>

$array = [
new Foo ( 'foo' ),
new Foo ( 'bar' ),
new Foo ( 'qux' )
];

echo implode ( '; ' , $array );
?>

will output:

12 years ago

If you want to implode an array of booleans, you will get a strange result:
var_dump ( implode ( '' ,array( true , true , false , false , true )));
?>

Output:
string(3) "111"

TRUE became "1", FALSE became nothing.

3 years ago

If you want to implode an array as key-value pairs, this method comes in handy.
The third parameter is the symbol to be used between key and value.

function mapped_implode ( $glue , $array , $symbol = '=' ) return implode ( $glue , array_map (
function( $k , $v ) use( $symbol ) <
return $k . $symbol . $v ;
>,
array_keys ( $array ),
array_values ( $array )
)
);
>

echo mapped_implode ( ', ' , $arr , ' is ' );

// output: x is 5, y is 7, z is 99, hello is World, 7 is Foo

2 years ago

Sometimes it's necessary to add a string not just between the items, but before or after too, and proper handling of zero items is also needed.
In this case, simply prepending/appending the separator next to implode() is not enough, so I made this little helper function.

function wrap_implode ( $array , $before = '' , $after = '' , $separator = '' ) if( ! $array ) return '' ;
return $before . implode ( " < $after >< $separator > < $before >" , $array ) . $after ;
>

echo wrap_implode ([ 'path' , 'to' , 'file.php' ], '/' );
// "/path/to/file.php"

$pattern = '#' . wrap_implode ([ 4 , 2 , 2 ], '\d' , '[-.]' ) . '#' ;
echo $pattern , "\n" ; // #\d[-.]\d[-.]\d#
echo preg_replace ( $pattern , '[REDACTED]' , 'The UFO appeared between 2012-12-24 and 2013.01.06 every night.' );
// 'The UFO appeared between [REDACTED] and [REDACTED] every night.

echo wrap_implode ([ 'line' , 'by' , 'line' ], '' , '' , '
' );
// line
by
line

10 years ago

It may be worth noting that if you accidentally call implode on a string rather than an array, you do NOT get your string back, you get NULL:
var_dump ( implode ( ':' , 'xxxxx' ));
?>
returns
NULL

This threw me for a little while.

11 years ago

Even handier if you use the following:

$id_nums = array( 1 , 6 , 12 , 18 , 24 );

$id_nums = implode ( ", " , $id_nums );

$sqlquery = "Select name,email,phone from usertable where user_id IN ( $id_nums )" ;

// $sqlquery becomes "Select name,email,phone from usertable where user_id IN (1,6,12,18,24)"
?>

Be sure to escape/sanitize/use prepared statements if you get the ids from users.

8 years ago

null values are imploded too. You can use array_filter() to sort out null values.

$ar = array( "hello" , null , "world" );
print( implode ( ',' , $ar )); // hello,,world
print( implode ( ',' , array_filter ( $ar , function( $v )< return $v !== null ; >))); // hello,world
?>

3 years ago

If you want to use a key inside array:

Example:
$arr=array(
array("id" => 1,"name" => "Test1"),
array("id" => 2,"name" => "Test2"),
);

echo implode_key(",",$arr, "name");
OUTPUT: Test1, Test2

function implode_key($glue, $arr, $key) $arr2=array();
foreach($arr as $f) if(!isset($f[$key])) continue;
$arr2[]=$f[$key];
>
return implode($glue, $arr2);
>

6 years ago

It is possible for an array to have numeric values, as well as string values. Implode will convert all numeric array elements to strings.

$test = implode ([ "one" , 2 , 3 , "four" , 5.67 ]);
echo $test ;
//outputs: "one23four5.67"
?>

2 years ago

There is no mention of behavior on a empty array, so I tried it and here's the result:

$ar = array();
$result = implode ( ',' , $ar ); // Comma arbitrarily applied as the separator
$is_result_empty = empty( $result );
?>

$result:
$is_result_empty: 1

In other words, an empty string is the result.

3 years ago

* Join pieces with a string recursively .
*
* @ param mixed $glue String between pairs ( glue ) or an array pair 's glue and key/value glue or $pieces.
* @param iterable $pieces Pieces to implode (optional).
* @return string Joined string
*/
function double_implode($glue, iterable $pieces = null): string
$glue2 = null;
if ($pieces === null) $pieces = $glue;
$glue = '';
> elseif (is_array($glue)) list($glue, $glue2) = $glue;
>

$result = [];
foreach ($pieces as $key => $value) $result[] = $glue2 === null ? $value : $key . $glue2 . $value;
>
return implode($glue, $result);
>
?>
Examples:
$array = [' a ' => 1, 'b' => 2];
$str = implode($array);
$str = implode(' , ', $array);
$str = implode(['" ', ' keyword">, ', $iterator);
$str = implode(['" ', ' foot">+add a note

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

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

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