|
str_split
Convert a string to an array
(PHP 5)
Example 2449. Example uses of str_split()<?php The above example will output: Array Code Examples / Notes » str_splitorganek
[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 Languageaddcslashes 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 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 |