PHP: Split string into array, like explode with no delimiter
Asked Answered
B

9

80

I have a string such as:

"0123456789"

And I need to split each character into an array.

I, for the hell of it, tried:

explode('', '123545789');

But it gave me the obvious: Warning: No delimiter defined in explode) ..

How would I come across this? I can't see any method off hand, especially just a function.

Boisterous answered 31/1, 2010 at 2:29 Comment(0)
T
140
$array = str_split("0123456789bcdfghjkmnpqrstvwxyz");

str_split takes an optional 2nd param, the chunk length (default 1), so you can do things like:

$array = str_split("aabbccdd", 2);

// $array[0] = aa
// $array[1] = bb
// $array[2] = cc  etc ...

You can also get at parts of your string by treating it as an array:

$string = "hello";
echo $string[1];

// outputs "e"
Tamarind answered 31/1, 2010 at 2:31 Comment(4)
Ah. Missed that function, was splitting binary numbers to becalculated in an array, this works well.Boisterous
What about encoding?Consign
PHP doesn't understand encoding. It will just split the string into bytes, so any multi-byte characters will get messed up. PHP6 was supposed to fix that but it didn't happen.Distract
@Consign In the comments at php.net/mb_split you can see a function written by adjwilli which is supposed to split a UTF8 string into characters.Distract
A
19

You can access characters in a string just like an array:

$s = 'abcd';
echo $s[0];

prints 'a'

Apo answered 31/1, 2010 at 2:34 Comment(1)
Of course, this answer makes no attempt to split a string, it just demonstrates how you can access byte values in a string by their offset.Nicholenicholl
D
7

Try this:

$str = '123456789';
$char_array = preg_split('//', $str, -1, PREG_SPLIT_NO_EMPTY);
Decentralize answered 31/1, 2010 at 2:34 Comment(3)
That's really unnecessary, and quite a bit slower then str_split.Tamarind
@Erik: Not if you need to get back an empty array in case the $str has no length.Orgulous
@Orgulous In that instance, it would be ample amounts faster to simply do a strlen check on $str and set $char_array = array() if strlen returns 0.Spoliate
H
5

str_split can do the trick. Note that strings in PHP can be accessed just like a character array. In most cases, you won't need to split your string into a "new" array.

Hull answered 31/1, 2010 at 2:34 Comment(0)
S
4

Here is an example that works with multibyte (UTF-8) strings.

$str = 'äbcd';

// PHP 5.4.8 allows null as the third argument of mb_strpos() function
do {
    $arr[] = mb_substr( $str, 0, 1, 'utf-8' );
} while ( $str = mb_substr( $str, 1, mb_strlen( $str ), 'utf-8' ) );

It can be also done with preg_split() (preg_split( '//u', $str, null, PREG_SPLIT_NO_EMPTY )), but unlike the above example, that runs almost as fast regardless of the size of the string, preg_split() is fast with small strings, but a lot slower with large ones.

Self answered 27/5, 2015 at 19:50 Comment(0)
T
1

Try this:

$str = "Hello Friend";

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

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

The above example will output:

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
)
Transudate answered 27/2, 2013 at 14:41 Comment(0)
D
1

Try this:

    $str = '546788';
    $char_array = preg_split('//', $str, -1, PREG_SPLIT_NO_EMPTY);
Defection answered 23/12, 2014 at 6:49 Comment(1)
This answer is missing its educational explanation.Nicholenicholl
L
0

If you want to split the string, it's best to use:

$array = str_split($string);

When you have a delimiter, which separates the string, you can try,

explode('', $string);

Where you can pass the delimiter in the first variable inside the explode such as:

explode(',', $string);
Latinalatinate answered 21/2, 2015 at 5:38 Comment(1)
Why try explode('', $string); if the OP already said that it makes PHP barf?Nicholenicholl
G
0
$array = str_split("$string");

will actually work pretty fine, but if you want to preserve the special characters in that string, and you want to do some manipulation with them, then I would use

do {
    $array[] = mb_substr($string, 0, 1, 'utf-8');
} while ($string = mb_substr($string, 1, mb_strlen($string), 'utf-8'));

because for some of mine personal uses, it has been shown to be more reliable when there is an issue with special characters.

Gorton answered 23/2, 2017 at 23:15 Comment(2)
Please define what "special characters" means. I know what you mean, but other researchers will not. "THAN" should be "then".Nicholenicholl
Probably any character outside the ASCII.Foreignism

© 2022 - 2024 — McMap. All rights reserved.