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.

9 Answers 9

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"
Sign up to request clarification or add additional context in comments.

4 Comments

Ah. Missed that function, was splitting binary numbers to becalculated in an array, this works well.
What about encoding?
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.
@kicaj 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.
19

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

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

prints 'a'

1 Comment

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.
7

Try this:

$str = '123456789';
$char_array = preg_split('//', $str, -1, PREG_SPLIT_NO_EMPTY);

3 Comments

That's really unnecessary, and quite a bit slower then str_split.
@Erik: Not if you need to get back an empty array in case the $str has no length.
@hakre 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.
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.

Comments

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.

Comments

1

Try this:

    $str = '546788';
    $char_array = preg_split('//', $str, -1, PREG_SPLIT_NO_EMPTY);

1 Comment

This answer is missing its educational explanation.
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
)

Comments

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);

1 Comment

Why try explode('', $string); if the OP already said that it makes PHP barf?
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.

2 Comments

Please define what "special characters" means. I know what you mean, but other researchers will not. "THAN" should be "then".
Probably any character outside the ASCII.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.