Delicious Bookmark this on Delicious Share on Facebook SlashdotSlashdot It! Digg! Digg



PHP : Function Reference : String Functions : str_split

str_split

Convert a string to an array (PHP 5)
array str_split ( string string [, int split_length] )

Example 2449. Example uses of str_split()

<?php

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

Code Examples / Notes » str_split

organek

[Editor's Note: Or just: php.net/wordwrap]
This is a little function to split a string into shorter strings with max lenght $n in such way, that it don't split words (it search for spaces), it's usefull for articles or sth.
Result is put in $ttab variable, and function result is number of "pages".
<?php
function divide_text($text, $n, &$ttab) {

$ttab = array();
$l = strlen($text); // text length
$cb = 0; //copy begin from..
$p = 0; // parts

if ($l  <= $n) {
$ttab[0] = $text;
return 1;
} else {
$ctrl = 1;
while(((($p-1) * $n) < $l) && ($ctrl < 100)) {
$crtl++; // control variable, to protect from infinite loops

$tmp = substr($text, $cb, $n);

// we're looking for last space in substring
$lastpos = strrpos($tmp," ");

if ( (is_bool($lastbool) && !$lastpos) || ( $l - $cb <= $n)) {
$ttab[$p] = $tmp;

} else  {
$tmpgood = trim(substr($tmp, 0,$lastpos));  // if they were another spaces at the end..
$ttab[$p] = $tmpgood;
$cb += $lastpos + 1 ;

}; // if
$p++;
}; //for
return $p;
}; // if

} // divide text
?>


edgaras dot janusauskas

To split unicode text, use preg_split('//u', $text);

aidan

This functionality is now implemented in the PEAR package PHP_Compat.
More information about using this function without upgrading your version of PHP can be found on the below link:
http://pear.php.net/package/PHP_Compat


hage yaapa

The very handy str_split() was introduced in PHP 5, but a lot of us are still forced to use PHP 4 at our host servers. And I am sure a lot of beginners have looked or are looking for a function to accomplish what str_split() does.
Taking advantge of the fact that strings are 'arrays' I wrote this tiny but useful e-mail cloaker in PHP, which guarantees functionality even if JavaScript is disabled in the client's browser. Watch how I make up for the lack of str_split() in PHP 4.3.10.
<?php
// cloackEmail() accepts a string, the email address to be cloaked
function cloakEmail($email) {
// We create a new array called $arChars, which will contain the individula characters making up the email address. The array is blank for now.
$arChars = array();
// We extract each character from the email 'exploiting' the fact that strings behave like an array: watch the '$email[$i]' bit, and beging to fill up the blank array $arChars
for ($i = 0; $i < strlen($email); $i++) { $arChars[] = $email[$i]; }
// Now we work on the $arChars array: extract each character in the array and print out it's ASCII value prefixed with '&#' to convert it into an HTML entity
foreach ($arChars as $char) { print '&#'.ord($char); }
// The result is an email address in HTML entities which, I hope most email address harvesters can't read.
}
print cloakEmail('someone@nokikon.com');
?>
###### THE CODE ABOVE WITHOUT COMMENTS ######
<?php
function cloakEmail($email) {
$arChars = array();
for ($i = 0; $i < strlen($email); $i++) { $arChars[] = $email[$i]; }
foreach ($arChars as $char) { print '&#'.ord($char); }
}
print cloakEmail('someone@nokikon.com');
?>

In creating this little utility, I demonstrated how the lack of str_split() can be made up in PHP < 5. If you got how it was accomplished, you could write a function to do exactly what str_split() does in PHP 5 and even name it 'str_split()'. :)


26-feb-2007 04:32

Problem with the post below me is, that the string can not contain the splitter "-1-".
Btw, here's my version.
<?php
function strsplit($str, $l=1) {
do {$ret[]=substr($str,0,$l); $str=substr($str,$l); }
while($str != "");
return $ret;
}
?>


14-mar-2006 01:49

Note to function by carlosreche at yahoo dot com.
The while:
<?php
...
              while ($str_length--) {
                  $splitted[$i] = $string[$i++];
              }
...
?>
.. result in index starting at 1.
Ie: str_split("ABC") gives
Array
(
   [1] => A
   [2] => B
   [3] => C
)
While php5's str_split("ABC") gives
Array
(
   [0] => A
   [1] => B
   [2] => C
)
And his str_split("ABC",2) gives index starting at 0.
Change to this (or something similar):
<?php
...
              while ($str_length--) {
                  $splitted[$i] = $string[$i];
                  $i++;
              }
...
?>
.... or use heavyraptor's function. A bit more sclick,..


siemen paulsen

Meercat9--
Look at the str_split() function.


fstorm2

If you use PHP 4 and don't need the split_length parameter, here's the shortest replacement:
<?php
preg_split('#(?<=.)(?=.)#s', $str);
?>


ference

If you are looking for a way to split multibyte strings then this may come in handy:
<?php
$text  = "süpérbrôsé";
function mb_str_split($str, $length = 1) {
 if ($length < 1) return FALSE;
 $result = array();
 for ($i = 0; $i < mb_strlen($str); $i += $length) {
   $result[] = mb_substr($str, $i, $length);
 }
 return $result;
}
$solo = mb_str_split($text);
$quintet = mb_str_split($text, 5);
print_r($solo);
print_r($quintet);
?>
Spits out:
Array
(
   [0] => s
   [1] => ü
   [2] => p
   [3] => é
   [4] => r
   [5] => b
   [6] => r
   [7] => ô
   [8] => s
   [9] => é
)
Array
(
   [0] => süpér
   [1] => brôsé
)


simple

if (!function_exists("str_split")) {
function str_split($string, $length = 1) {
if ($length <= 0) {
trigger_error(__FUNCTION__."(): The the length of each segment must be greater then zero:", E_USER_WARNING);
return false;
}
$splitted  = array();
while (strlen($string) > 0) {
$splitted[] = substr($string, 0, $length);
$string = substr($string, $length);
}
return $splitted;
}
}


dacmeaux

I was looking for a function that would split a string into an array like str_split() and found Razor's function above. Just though that I would simplify the code a little.
<?php
function str_split_php4($text, $split = 1){
   //place each character of the string into and array
   $array = array();
   for($i=0; $i < strlen($text); $i++){
       $key = NULL;
       for ($j = 0; $j < $split; $j++){
           $key .= $text[$i];  
       }
       array_push($array, $key);
   }
   return $array;
}
?>
Both mine and worksRazor's work well, I just prefer to use less code. I could have written one myself, but I was just being lazy.


heavyraptor

I think that the last post by carlosreche at yahoo dot com is too complicated.
It's much easier if you do it like this:
<?php
if (!function_exists("str_split")) {
 function str_split($str,$length = 1) {
   if ($length < 1) return false;
   $strlen = strlen($str);
   $ret = array();
   for ($i = 0; $i < $strlen; $i += $length) {
    $ret[] = substr($str,$i,$length);
   }
   return $ret;
 }
}
?>
I hope it helps for those with PHP <5


webmaster

I noticed in the post below me that his function would return an array with an empty key at the end.
So here is just a little fix for it.
<?php
//Create a string split function for pre PHP5 versions
function str_split($str, $nr) {  

//Return an array with 1 less item then the one we have
return array_slice(split("-l-", chunk_split($str, $nr, '-l-')), 0, -1);
 
}
?>


l0c4lh0st dot nl

how I can conwert
$string
'1, 2, 5, 6, 10, 13, 23'
from ENUM at mySQL to
$array
[0] -> false
[1] -> true
[2] -> true
[3] -> false
[4] -> false
[5] -> true
[6] -> true
[7] -> false
[8] -> false
[9] -> false
[10] -> true
[11] -> false
[12] -> false
[13] -> true
[14] -> false
[15] -> false
...
[23] -> true
<?php
function enum_to_array($psEnum)
{
   $aReturn = array();
   $aTemp = explode(', ', $psEnum);
   for ($i = $aTemp[0]; $i <= $aTemp[count($aTemp)-1]; $i++)
   {
       $aReturn[$i] = in_array($i, $aTemp);
   }
}
?>


m@rek from poland

how I can conwert
$string
'1, 2, 5, 6, 10, 13, 23'
from ENUM at mySQL to
$array
[0] -> false
[1] -> true
[2] -> true
[3] -> false
[4] -> false
[5] -> true
[6] -> true
[7] -> false
[8] -> false
[9] -> false
[10] -> true
[11] -> false
[12] -> false
[13] -> true
[14] -> false
[15] -> false
...
[23] -> true


razor

heres my version for php4 and below
<?php
function str_split_php4($text, $split = 1)
{
if (!is_string($text)) return false;
if (!is_numeric($split) && $split < 1) return false;

$len = strlen($text);

$array = array();

$i = 0;

while ($i < $len)
{
$key = NULL;

for ($j = 0; $j < $split; $j += 1)
{
$key .= $text{$i};

$i += 1;
}

$array[] = $key;
}

return $array;
}
?>


kjensen

Here is what I use. I started with examples here but modified to my own version:
<?php
if (phpversion () < "5"){ // define PHP5 functions if server uses PHP4
function str_split($text, $split = 1)
{
if (!is_string($text)) return false;
if (!is_numeric($split) && $split < 1) return false;
$len = strlen($text);
$array = array();
$s = 0;
$e=$split;
while ($s <$len)
{
$e=($e <$len)?$e:$len;
$array[] = substr($text, $s,$e);
$s = $s+$e;
}
return $array;
}
}
?>


user

found this great example on a php board for those not using php5, as an alternative to the posts below this
<?php
if(!function_exists('str_split')){
   function str_split($string,$split_length=1){
       $count = strlen($string);  
       if($split_length < 1){
           return false;  
       } elseif($split_length > $count){
           return array($string);
       } else {
           $num = (int)ceil($count/$split_length);  
           $ret = array();  
           for($i=0;$i<$num;$i++){  
               $ret[] = substr($string,$i*$split_length,$split_length);  
           }  
           return $ret;
       }      
   }  
}
?>


carlosreche

For those who work with PHP < 5:
<?php
if (!function_exists("str_split")) {
   function str_split($string, $length = 1) {
       if ($length <= 0) {
           trigger_error(__FUNCTION__."(): The the length of each segment must be greater then zero:", E_USER_WARNING);
           return false;
       }
       $splitted  = array();
       $str_length = strlen($string);
       $i = 0;
       if ($length == 1) {
           while ($str_length--) {
               $splitted[$i] = $string[$i++];
           }
       } else {
           $j = $i;
           while ($str_length > 0) {
               $splitted[$j++] = substr($string, $i, $length);
               $str_length -= $length;
               $i += $length;
           }
       }
       return $splitted;
   }
}
?>


magisano

Even shorter version:
//place each character (or group of) of the
string into and array
function str_split_php4($sText, $iSplit = 1)
{
   $iSplit=(integer) $iSplit;       // sanity check
   if ($iSplit < 1) {  return false; }
   $aResult = array();
   for($i=0, $limit=strlen($sText); $i < $limit; $i+=$iSplit) {
       $aResult[]=substr($sText, $i, $iSplit);
   }
   return $aResult;
}


http://www.matt-fletcher.co.uk/

A simple way to split credit card numbers into chunks of four numbers:
<?php
echo implode(' ',str_split($card_number,4));
?>


sam

A good way to use this method to convert CamelCase text into nice text would be-
<?php
       /**
        Returns a formatted string based on camel case.
        e.g. "CamelCase" -> "Camel Case".
       */
       function FormatCamelCase( $string ) {
               $output = "";
               foreach( str_split( $string ) as $char ) {
                       strtoupper( $char ) == $char and $output and $output .= " ";
                       $output .= $char;
               }
               return $output;
       }
?>


dhayes

@razor: this'll work for php4
<?php
$str = 'two words';
$array = explode("\r\n", chunk_split($str,1));
?>


05-oct-2006 01:14

//fast & short version od str_split PHP3, 4x
function string_split($str, $nr){
return split("-l-", chunk_split($str, $nr, '-l-'));
}
//example :
print_r(string_split('123412341234', 4));


malmsteenforce

<?
//fast & short version od str_split
function string_split($str)
 {
   $str_array=array();
   $len=strlen($str);
   for($i=0;$i<$len;$i++) $str_array[]=$str{$i};
   return $str_array;
  }
//example :
var_dump (string_split("split this"));
?>


Change Language


Follow Navioo On Twitter
addcslashes
addslashes
bin2hex
chop
chr
chunk_split
convert_cyr_string
convert_uudecode
convert_uuencode
count_chars
crc32
crypt
echo
explode
fprintf
get_html_translation_table
hebrev
hebrevc
html_entity_decode
htmlentities
htmlspecialchars_decode
htmlspecialchars
implode
join
levenshtein
localeconv
ltrim
md5_file
md5
metaphone
money_format
nl_langinfo
nl2br
number_format
ord
parse_str
print
printf
quoted_printable_decode
quotemeta
rtrim
setlocale
sha1_file
sha1
similar_text
soundex
sprintf
sscanf
str_getcsv
str_ireplace
str_pad
str_repeat
str_replace
str_rot13
str_shuffle
str_split
str_word_count
strcasecmp
strchr
strcmp
strcoll
strcspn
strip_tags
stripcslashes
stripos
stripslashes
stristr
strlen
strnatcasecmp
strnatcmp
strncasecmp
strncmp
strpbrk
strpos
strrchr
strrev
strripos
strrpos
strspn
strstr
strtok
strtolower
strtoupper
strtr
substr_compare
substr_count
substr_replace
substr
trim
ucfirst
ucwords
vfprintf
vprintf
vsprintf
wordwrap
eXTReMe Tracker