CXLVI. Функции обработки строк

Введение

Эти функции предназначены для выполнения различных манипуляций со строками. Более специализированные функции см. в разделах, посвященных регулярным выражениям и обработке URL.

Для получения общей информации о работе со строками, особенно об использовании одиночных и двойных кавычек и экранировании символов, смотрите главу "Строки" в разделе "Типы" .

Требования

Эти функции всегда доступны.

Установка

Для использования этих функций не требуется проведение установки, поскольку они являются частью ядра PHP.

Предопределенные константы

Перечисленные ниже константы определены данным расширением и могут быть доступны только в том случае, если PHP был собран с поддержкой этого расширения или же в том случае, если данное расширение подгружается во время выполнения.

CRYPT_SALT_LENGTH integer

CRYPT_STD_DES integer

CRYPT_EXT_DES integer

CRYPT_MD5 integer

CRYPT_BLOWFISH integer

HTML_SPECIALCHARS (integer)

HTML_ENTITIES (integer)

ENT_COMPAT (integer)

ENT_QUOTES (integer)

ENT_NOQUOTES (integer)

CHAR_MAX (integer)

LC_CTYPE (integer)

LC_NUMERIC (integer)

LC_TIME (integer)

LC_COLLATE (integer)

LC_MONETARY (integer)

LC_ALL (integer)

LC_MESSAGES (integer)

STR_PAD_LEFT (integer)

STR_PAD_RIGHT (integer)

STR_PAD_BOTH (integer)

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

Для получения информации о более сложной обработке строк обратитесь к разделам о регулярных выражениях: POSIX-совместимых и Perl-совместимых.

Содержание
addcslashes -- Экранирует спецсимволы в стиле языка C
addslashes -- Экранирует спецсимволы в строке
bin2hex --  Преобразует бинарные данные в шестнадцатиричное представление
chop -- Псевдоним функции rtrim()
chr -- Возвращает символ по его коду
chunk_split -- Разбивает строку на фрагменты
convert_cyr_string --  Преобразует строку из одной кириллической кодировки в другую
convert_uudecode --  Преобразует строку из формата uuencode в обычный вид
convert_uuencode --  Преобразует строку в формат uuencode
count_chars --  Возвращает информацию о символах, входящих в строку
crc32 -- Вычисляет CRC32 для строки
crypt -- Необратимое шифрование (хэширование)
echo -- Выводит одну или более строк
explode -- Разбивает строку на подстроки
fprintf -- Записывает отформатированную строку в поток
get_html_translation_table --  Возвращает таблицу преобразований, используемую функциями htmlspecialchars() и htmlentities()
hebrev --  Преобразует текст на иврите из логической кодировки в визуальную.
hebrevc --  Преобразует текст на иврите из логической кодировки в визуальную с преобразованием перевода строки.
html_entity_decode --  Преобразует HTML сущности в соответствующие символы
htmlentities --  Преобразует символы в соответствующие HTML сущности.
htmlspecialchars_decode --  Преобразует специальные HTML-сущности обратно в соответствующие символы
htmlspecialchars --  Преобразует специальные символы в HTML сущности
implode -- Объединяет элементы массива в строку
join -- Псевдоним функции implode()
levenshtein --  Вычисляет расстояние Левенштейна между двумя строками
localeconv -- Возвращает информацию о числовых форматах
ltrim --  Удаляет пробелы из начала строки
md5_file -- Возвращает MD5 хэш файла
md5 -- Возвращает MD5 хэш строки
metaphone -- Возвращает ключ metaphone для строки
money_format -- Форматирует число как денежную величину
nl_langinfo --  Возвращает информацию о языке и локали
nl2br --  Вставляет HTML код разрыва строки перед каждым переводом строки
number_format -- Форматирует число с разделением групп
ord -- Возвращает ASCII код символа
parse_str -- Разбирает строку в переменные
print -- Выводит строку
printf -- Выводит отформатированную строку
quoted_printable_decode --  Раскодирует строку, закодированную методом quoted printable
quotemeta -- Экранирует специальные символы
rtrim --  Удаляет пробелы из конца строки
setlocale -- Устанавливает локаль
sha1_file -- Возвращает SHA1 хэш файла
sha1 -- Возвращает SHA1 хэш строки
similar_text --  Вычисляет степень похожести двух строк
soundex -- Возвращает ключ soundex для строки
sprintf -- Возвращает отформатированную строку
sscanf --  Разбирает строку в соответствии с заданным форматом
str_ireplace --  Регистро-независимый вариант функции str_replace().
str_pad --  Дополняет строку другой строкой до заданной длины
str_repeat -- Возвращает повторяющуюся строку
str_replace --  Заменяет строку поиска на строку замены
str_rot13 -- Выполняет над строкой преобразование ROT13
str_shuffle -- Переставляет символы в строке
str_split --  Преобразует строку в массив
str_word_count --  Возвращает информацию о словах, входящих в строку
strcasecmp --  Сравнение строк без учета регистра, безопасное для данных в двоичной форме
strchr -- Псевдоним функции strstr()
strcmp --  Сравнение строк, безопасное для данных в двоичной форме
strcoll -- Сравнение строк с учетом текущей локали
strcspn --  Возвращает длину участка в начале строки, не соответствующего маске
strip_tags -- Удаляет HTML и PHP тэги из строки
stripcslashes --  Удаляет экранирование символов, произведенное функцией addcslashes()
stripos --  Возвращает позицию первого вхождения подстроки без учета регистра
stripslashes --  Удаляет экранирование символов, произведенное функцией addslashes()
stristr --  Регистро-независимый вариант функции strstr().
strlen -- Возвращает длину строки
strnatcasecmp --  Сравнение строк без учета регистра с использованием алгоритма "естественного упорядочения"
strnatcmp --  Сравнение строк с использованием алгоритма "естественного упорядочения"
strncasecmp --  Сравнение первых n символов строк без учета регистра, безопасное для данных в двоичной форме
strncmp --  Сравнение первых n символов строк без учета регистра, безопасное для данных в двоичной форме
strpbrk --  Ищет в строке любой символ из заданного набора
strpos --  Возвращает позицию первого вхождения подстроки
strrchr --  Находит последнее вхождение подстроки
strrev -- Переворачивает строку
strripos --  Возвращает позицию последнего вхождения подстроки без учета регистра
strrpos --  Возвращает позицию последнего вхождения символа
strspn --  Возвращает длину участка в начале строки, соответствующего маске
strstr --  Находит первое вхождение подстроки
strtok -- Разбивает строку
strtolower -- Преобразует строку в нижний регистр
strtoupper -- Преобразует строку в верхний регистр
strtr -- Преобразует заданные символы
substr_compare --  Безопасное для обработки данных в двоичной форме сравнение 2 строк со смещением, с учетом или без учета регистра
substr_count -- Возвращает число вхождений подстроки
substr_replace -- Заменяет часть строки
substr -- Возвращает подстроку
trim --  Удаляет пробелы из начала и конца строки
ucfirst --  Преобразует первый символ строки в верхний регистр
ucwords --  Преобразует в верхний регистр первый символ каждого слова в строке
vfprintf -- Write a formatted string to a stream
vprintf -- Выводит отформатированную строку
vsprintf -- Возвращает отформатированную строку
wordwrap --  Выполняет перенос строки на данное количество символов с использованием символа разрыва строки.


Функции обработки строк
administrador(ensaimada)sphoera(punt)com
02-Mar-2006 06:10
I've prepared this simple function to obtain a string delimited between tags (not only XML tags!). Anybody needs something like this?.

<?php

function get_string_between($string, $start, $end){
  
$string = " ".$string;
    
$ini = strpos($string,$start);
     if (
$ini == 0) return "";
    
$ini += strlen($start);   
    
$len = strpos($string,$end,$ini) - $ini;
     return
substr($string,$ini,$len);
}

$string = "this [custom] function is useless!!";
echo
get_string_between($string,"[","]");
// must return "custom";
?>
more functions at http://www.sphoera.com
SteveRusin
24-Feb-2006 11:00
The functions below:

function beginsWith( $str, $sub )
function endsWith( $str, $sub )

Are correct, but flawed.  You'd need to use the === operator instead:

function beginsWith( $str, $sub ) {
   return ( substr( $str, 0, strlen( $sub ) ) === $sub );
}
function endsWith( $str, $sub ) {
   return ( substr( $str, strlen( $str ) - strlen( $sub ) ) === $sub );
}

Otherwise, endsWith would return "foobar.0" ends with ".0" as well as "0" or "00" or any amount of zeros because numerically .0 does equal 0.
navarr at gmail dot com
20-Dec-2005 06:24
stripos for PHP4.x

<?php
 
function stripos($haystack,$needle) {
   return
strpos(strtoupper($haystack),strtoupper($needle));
  }
?>
dkflbk at nm dot ru
11-Dec-2005 08:58
I needed str2bin() function for one of my project, so if some one else is want to use it, have fun :)

<?php
/**
 *    Returns an ASCII string containing
 *    the binary representation of the input data .
**/
function str2bin($str, $mode=0) {
  
$out = false;
   for(
$a=0; $a < strlen($str); $a++) {
      
$dec = ord(substr($str,$a,1));
      
$bin = '';
       for(
$i=7; $i>=0; $i--) {
           if (
$dec >= pow(2, $i) ) {
              
$bin .= "1";
              
$dec -= pow(2, $i);
           } else {
              
$bin .= "0";
           }
       }
      
/* Default-mode */
      
if ( $mode == 0 ) $out .= $bin;
      
/* Human-mode (easy to read) */
      
if ( $mode == 1 ) $out .= $bin . " ";
      
/* Array-mode (easy to use) */
      
if ( $mode == 2 ) $out[$a] = $bin;
   }
   return
$out;
}
?>
admin at fivestarbuy dot com
21-Oct-2005 09:18
This example lets you parse an unparsed strings variables. Warning: This could cause security leaks if you allow users to pass $variables through this engine. I recommend only using this for your Content Management System.

<?
$mytime
=time();
$mydog="My Dog Ate My PHP!";

# Your Parsing String:
$s1 = 'Hyphen Variable Preserving: $mytime, and $mydog';
echo
"Before: <br><br>$s1<br><br>";

# Remember, wherever you define this, it will not be defined GLOBAL into the function
# which is why we define it here. Defining it global could lead to security issues.
$vardata=get_defined_vars();

# Parse the string
$s1 = StrParse($s1,$vardata);

echo
"After: <br><br>$s1";

function
StrParse($str,$vardata) {
# Takes a string, or piece of data, that contains PHP Variables
 
 # For example, unparsed variables like:  Test using time: $mytime
 # This example shows $mytime, and not the actual variable value.
 # The end result shows the actual variable value of $mytime.

 # This is useful for building a content management system,
 # and directing your variables into your content data,
 # where content is stored in a file or database, unparsed.
 # Of course this could slow down page loads, but it's a good way
 # to parse data from current variables into your loaded new data
 # making it compatible.
 
# Then the variables are replaced with the actual variable..
$getvarkeys=array_keys($vardata);
$ret=$str;
for (
$x=0; $x < count($getvarkeys); $x++) {
  
$myvar=$getvarkeys[$x];
  
#echo "Variable: " . $myvar . " [" . $vardata[$myvar] . "]<br>";
  
$ret=str_replace('$' . $myvar, $vardata[$myvar], $ret);
}
return
$ret;

}

?>
17-Oct-2005 03:27
to: james dot d dot baker at gmail dot com

PHP has a builtin function  for doing what your function does,

http://php.net/ucfirst
http://php.net/ucwords
14-Oct-2005 08:24
Updated; used to test for input as an array, should have been a string, added some validation of the input while I was at it.  Enjoy.

<?php
/*----------        Directory Tree to Array        ----------//
  Takes base directory, returns an associative array
       containing each directory name as an associative key
       and each file as an indexed entry in the appropriate
       directory.
  If no path is provided, it uses the current directory
  If $style == 1, it will return a sorted, non-associative
       array

  By Peter Dolan
  www.peterd.net
  Updated 2005-10-12

  Use it as much as you like for whatever
  For my own entertainment, please let me know if you do
//-----------------------------------------------------------*/
function dirTreeToArray( $path = "./", $style="0" ) {
     if ( !
is_string($path) or !($style==0 or $style==1) ) die("Improper arguments in function dirTreeToArray(string \$path, \$style = {0, 1})");
     else {
      
$path = trim($path);
      
$path = str_replace("\\", "/", $path);
       if(
'/' == $path{strlen($path)-1} || '\'' == $path{strlen($path)-1} ) $path = substr($path, 0, strlen($path)-1);
     }
    
$tree = array();
    
$arrayPointer = & $tree;
   if (
$handle = opendir($path) ) {
       while (
$fileName = readdir($handle) ) {
             if (
$fileName != "." and $fileName != ".." ) {
                      
$newPath = "$path/$fileName";        // Used for testing directory or file property
                
if ( is_dir($newPath) ) {
                  
$dummyPointer = & $arrayPointer;        // Save the current pointer
                    
if ( $style == 0 ) $arrayPointer = & $arrayPointer[$fileName];    // Drop the pointer into a subdirectory
                    
elseif ( $style == 1 ) $arrayPointer = & $arrayPointer[];        // Drop the pointer into a subdirectory
                    
$arrayPointer = dirTreeToArray($newPath, $style);            // Process the new subdirectory
                  
if ( $style == 1 ) sort($arrayPointer);    // Sort it if we're in a non-associative mode
                    
$arrayPointer = & $dummyPointer;        // Bring the pointer back up a level
              
}
                 elseif (
is_file($newPath) ) $arrayPointer[] = $fileName;    // Enter the files
          
}
       }
               return
$tree;
   }
   else die(
"Failed to open directory $path in function dirTreeToArray(string \$path, \$style = {0, 1})");
}
?>
tim_meredith at s4s dot org
13-Oct-2005 01:32
--Convert MSWord Quotes--
Use this before any conversion to HTML entities or characters to clean up a form entry cut and pasted from MSWord.

function fixword($scratch)
{
   $start=chr(226).chr(128);
   $word=array();$fixword=array();
   $word[]=$start.chr(152);$fixword[]="'";
   $word[]=$start.chr(153);$fixword[]="'";
   $word[]=$start.chr(156);$fixword[]="\"";
   $word[]=$start.chr(157);$fixword[]="\"";
   return str_replace($word, $fixword, $scratch);
}
webmaster at cafe-clope dot net
13-Aug-2005 04:40
A comprehensive concatenation function, that works with array and strings

<?php
function str_cat() {
 
$args = func_get_args() ;
  
 
// Asserts that every array given as argument is $dim-size.
  // Keys in arrays are stripped off.
  // If no array is found, $dim stays unset.
 
foreach($args as $key => $arg) {
   if(
is_array($arg)) {
     if(!isset(
$dim))
      
$dim = count($arg) ;
     elseif(
$dim != count($arg))
       return
FALSE ;
    
$args[$key] = array_values($arg) ;
   }
  }
      
 
// Concatenation
 
if(isset($dim)) {
  
$result = array() ;
   for(
$i=0;$i<$dim;$i++) {
    
$result[$i] = '' ;
     foreach(
$args as $arg)
      
$result[$i] .= ( is_array($arg) ? $arg[$i] : $arg ) ;
   }
   return
$result ;
  } else {
   return
implode($args) ;
  }
}
?>

A simple example :

<?php
str_cat
(array(1,2,3), '-', array('foo' => 'foo', 'bar' => 'bar', 'noop' => 'noop')) ;
?>

will return :
Array (
  [0] => 1-foo
  [1] => 2-bar
  [2] => 3-noop
)

More usefull :

<?php
$myget
= $_GET ; // retrieving previous $_GET values
$myget['foo'] = 'b a r' ; // changing one value
$myget = str_cat(array_keys($myget), '=', array_map('rawurlencode', array_values($myget))) ;
$querystring = implode(ini_get('arg_separator.output'), $myget)) ;
?>

will return a valid querystring with some values changed.

Note that <?php str_cat('foo', '&', 'bar') ; ?> will return 'foo&bar', while <?php str_cat(array('foo'), '&', 'bar') ; ?> will return array(0 => foo&bar)
t0russ at gmail dot com
14-Jun-2005 10:38
to kristin at greenaple dot on dot ca:
thanx for sharing.
your function in recursive form proved to be slightly faster and it returns false (as it should) when the character is not found instead of number 0:
<?php
function strnposr($haystack, $needle, $occurance, $pos = 0) {
   return (
$occurance<2)?strpos($haystack, $needle, $pos):strnposr($haystack,$needle,$occurance-1,strpos($haystack, $needle, $pos) + 1);
}
?>
rh at richardhoward dot net
05-Jun-2005 11:41
<?php
/**
Utility class: static methods for cleaning & escaping untrusted (i.e.
user-supplied) strings.

Any string can (usually) be thought of as being in one of these 'modes':

pure = what the user actually typed / what you want to see on the page /
       what is actually stored in the DB
gpc  = incoming GET, POST or COOKIE data
sql  = escaped for passing safely to RDBMS via SQL (also, data from DB
       queries and file reads if you have magic_quotes_runtime on--which
       is rare)
html = safe for html display (htmlentities applied)

Always knowing what mode your string is in--using these methods to
convert between modes--will prevent SQL injection and cross-site scripting.

This class refers to its own namespace (so it can work in PHP 4--there is no
self keyword until PHP 5). Do not change the name of the class w/o changing
all the internal references.

Example usage: a POST value that you want to query with:
$username = Str::gpc2sql($_POST['username']);
*/

//This sets SQL escaping to use slashes; for Sybase(/MSSQL)-style escaping
// ( ' --> '' ), set to true.
define('STR_SYBASE', false);

class
Str {
   function
gpc2sql($gpc, $maxLength = false)
   {
       return
Str::pure2sql(Str::gpc2pure($gpc), $maxLength);
   }
   function
gpc2html($gpc, $maxLength = false)
   {
       return
Str::pure2html(Str::gpc2pure($gpc), $maxLength);
   }
   function
gpc2pure($gpc)
   {
       if (
ini_get('magic_quotes_sybase'))
          
$pure = str_replace("''", "'", $gpc);
       else
$pure = get_magic_quotes_gpc() ? stripslashes($gpc) : $gpc;
       return
$pure;
   }
   function
html2pure($html)
   {
       return
html_entity_decode($html);
   }
   function
html2sql($html, $maxLength = false)
   {
       return
Str::pure2sql(Str::html2pure($html), $maxLength);
   }
   function
pure2html($pure, $maxLength = false)
   {
       return
$maxLength ? htmlentities(substr($pure, 0, $maxLength))
                         :
htmlentities($pure);
   }
   function
pure2sql($pure, $maxLength = false)
   {
       if (
$maxLength) $pure = substr($pure, 0, $maxLength);
       return (
STR_SYBASE)
               ?
str_replace("'", "''", $pure)
               :
addslashes($pure);
   }
   function
sql2html($sql, $maxLength = false)
   {
      
$pure = Str::sql2pure($sql);
       if (
$maxLength) $pure = substr($pure, 0, $maxLength);
       return
Str::pure2html($pure);
   }
   function
sql2pure($sql)
   {
       return (
STR_SYBASE)
               ?
str_replace("''", "'", $sql)
               :
stripslashes($sql);
   }
}
?>
james dot d dot baker at gmail dot com
27-May-2005 10:45
<?php
/*
Written By James Baker, May 27th 2005

sentenceCase($string);
   $string: The string to convert to sentence case.

Converts a string into proper sentence case (First letter of each sentance capital, all the others smaller)

Example Usage:
echo sentenceCase("HELLO WORLD!!! THIS IS A CAPITALISED SENTENCE. this isn't.");

Returns:
Hello world!!! This is a capitalised sentence. This isn't.
*/

function sentenceCase($s){
  
$str = strtolower($s);
  
$cap = true;
  
   for(
$x = 0; $x < strlen($str); $x++){
      
$letter = substr($str, $x, 1);
       if(
$letter == "." || $letter == "!" || $letter == "?"){
          
$cap = true;
       }elseif(
$letter != " " && $cap == true){
          
$letter = strtoupper($letter);
          
$cap = false;
       }
      
      
$ret .= $letter;
   }
  
   return
$ret;
}
?>
php at moechofe dot com
26-Apr-2005 06:34
<?php
 
/*
  * str_match
  *
  * return a string with only cacacteres defined in a expression return false if the expression is not valid
  *
  * @param $str string the string
  * @param $match the expression based on the class definition off a PCRE regular expression.
  *  the '[', ']', '\' and '^' at class start need to be escaped.
  *  like : -a-z0-9_@.
  */
 
function str_match( $str, $match )
  {
  
$return = '';
   if(
eregi( '(.*)', $match, $class ) )
   {
    
$match = '['.$regs[1].']';
     for(
$i=0; $i<strlen($str); $i++ )
     if(
ereg( '['.$class[1].']', $str[$i] ) )
    
$return .= $str{$i};
     return
$return;
   }
   else return
false;
  }

 
/*
  * example
  * accept only alphanum caracteres from the GET/POST parameters 'a'
  */

 
if( ! empty($_REQUEST['a']) )
  
$_REQUEST['a'] = str_match( $_REQUEST['a'], 'a-zA-Z0-9' );
  else
  
$_REQUEST['a'] = 'default';
?>
Pommef
19-Mar-2005 01:15
Example: Give me everything up to the fourth occurance of '/'.

<?php

   $haystack
= "/home/username/www/index.php";
  
$needle = "/";
 
   function
strnpos($haystack, $needle, $occurance, $pos = 0) {
      
      
$res = implode($needle,$haystack);
      
      
$res = array_slice($res, $pos$occurance);
      
       return
explode ($needle,$res);
   }
?>
kristin at greenapple dot on dot ca
02-Jan-2005 08:32
I really searched for a function that would do this as I've seen it in other languages but I couldn't find it here. This is particularily useful when combined with substr() to take the first part of a string up to a certain point.

strnpos() - Find the nth position of needle in haystack.

<?php

  
function strnpos($haystack, $needle, $occurance, $pos = 0) {
      
       for (
$i = 1; $i <= $occurance; $i++) {
          
$pos = strpos($haystack, $needle, $pos) + 1;
       }
       return
$pos - 1;
      
   }

?>

Example: Give me everything up to the fourth occurance of '/'.

<?php

   $haystack
= "/home/username/www/index.php";
  
$needle = "/";
  
  
$root_dir = substr($haystack, 0, strnpos($haystack, $needle, 4));
  
   echo
$root_dir;
  
?>

Returns: /home/username/www

Use this example with the server variable $_SERVER['SCRIPT_NAME'] as the haystack and you can self-discover a document's root directory for the purposes of locating global files automatically!
20-Dec-2004 08:31
In response to hackajar <matt> yahoo <trot> com,

No string-to-array function exists because it is not needed. If you reference a string with an offset like you do with an array, the character at that offset will be return. This is documented in section III.11's "Strings" article under the "String access and modification by character" heading.
andy a t onesandzeros d o t biz
09-Nov-2004 02:54
I use these little doo-dads quite a bit. I just thought I'd share them and maybe save someone a little time. No biggy. :)

// returns true if $str begins with $sub
function beginsWith( $str, $sub ) {
   return ( substr( $str, 0, strlen( $sub ) ) == $sub );
}

// return tru if $str ends with $sub
function endsWith( $str, $sub ) {
   return ( substr( $str, strlen( $str ) - strlen( $sub ) ) == $sub );
}

// trims off x chars from the front of a string
// or the matching string in $off is trimmed off
function trimOffFront( $off, $str ) {
   if( is_numeric( $off ) )
       return substr( $str, $off );
   else
       return substr( $str, strlen( $off ) );
}

// trims off x chars from the end of a string
// or the matching string in $off is trimmed off
function trimOffEnd( $off, $str ) {
   if( is_numeric( $off ) )
       return substr( $str, 0, strlen( $str ) - $off );
   else
       return substr( $str, 0, strlen( $str ) - strlen( $off ) );
}
[tab!]
27-Oct-2004 12:29
//
// string strtrmvistl(  string str, [int maxlen = 64],
//                      [bool right_justify = false],
//                      [string delimter = "<br>\n"])
//
// splits a long string into two chunks (a start and an end chunk)
// of a given maximum length and seperates them by a given delimeter.
// a second chunk can be right-justified within maxlen.
// may be used to 'spread' a string over two lines.
//

function strtrmvistl($str, $maxlen = 64, $right_justify = false, $delimter = "<br>\n") {
   if(($len = strlen($str = chop($str))) > ($maxlen = max($maxlen, 12))) {
       $newstr = substr($str, 0, $maxlen - 3);

       if($len > ($maxlen - 3)) {
           $endlen = min(($len - strlen($newstr)), $maxlen - 3);
           $newstr .= "..." . $delimter;

           if($right_justify)
               $newstr .= str_pad('', $maxlen - $endlen - 3, ' ');

           $newstr .= "..." . substr($str, $len - $endlen);
       }

       return($newstr);
   }

   return($str);
}
terry dot greenlaw at logicalshift dot com
11-Aug-2004 10:52
Here's a simpler "simplest" way to toggle through a set of 1..n colors for web backgrounds:

<?php
$colours
= array('#000000', '#808080', '#A0A0A0', '#FFFFFF');

// Get a colour
$color = next($colors) or $color = reset($colors);
?>

The code doesn't need to know anything about the number of elements being cycled through. That way you won't have to tracking down all the code when changing the number of colors or the color values.

<stream_wrapper_unregisteraddcslashes>
 Last updated: Tue, 15 Nov 2005