Как работать со строками в php
Строки играют большую роль, задачи на парсинг строк довольно часто встречаются в PHP , поэтому рассмотрим некоторые базовые функции работы со строками.
Строки представляют некоторый текст, который заключен в одинарные или двойные кавычки:
$str1 = "Hello"; $str2 = 'Welcome';
Но также PHP позволяет определить строку и без кавычек с помощью оператора
В данном случае «LABEL» — это название метки, которая указывает на начало и конец строки. Название метки произвольное. То есть все, что расположено между
Hello World! Bye World..
И в данном случае, как и в обычной строке мы можем использовать переменные:
$name = "Tom"; $age = 36; $s =Обращение к символам строки
PHP позволяет обращаться к отдельным символам строки как к элементам массива по числовому индексу:
$str = "Hello Tom"; echo $str[0];// получим первый символ - H $str[1] = "i"; // поменяем второй символ echo "
" . $str . "
"; // Hillo TomИндексация символов, как и в массиве, начинается с нуля.
Специальные функции и расширение mbstring
Кроме некоторых базовых возможностей по работе со строками PHP также предоставляет ряд специальных функций. Для некоторых из них требуется подключить специальное расширение - mbstring.dll . Для подключения этого расширения откроем файл конфигурации PHP - php.ini и найдем в нем следующую строку:
;extension=mbstringРаскомментируем ее, убрав точку с запятой.
extension=mbstringТакже убедимся, что у нас указан путь к папке расширений.
Найдем в файле php.ini строку:
;extension_dir = "ext"Эта строка указывает на каталог с подключаемыми расширениями для PHP. По умолчанию все расширения располагаются в папке ext . Раскомментируем эту строку, убрав точку с запятой, и укажем полный путь к папке ext . Так, в моем случае папка c php расположена в корне диска C (ОС Windows), соответственно я указываю путь "C:\php\ext":
extension_dir = "C:\php\ext"И так как у нас файл php.ini изменился, перезапустим веб-сервер Apache.
Подключение расширения mbstring позволит задействовать некоторые дополнительные функции для работы со строками, которые в стандартном наборе PHP отсутствуют (такие функции обычно начинаются с префикса mb_ ).
Функции strpos() и mb_strpos()
Функция strpos($str, $search) возвращает позицию подстроки или символа $search в строке $str или значение false , если строка $str не содержит подстроки $search:
$input = "This is the end"; $search = "is"; $position = strpos($input, $search); // 2 if($position!==false)
При использовании этой функции надо учитывать, что индексация символов в строке начинается с нуля, поэтому позиция символа "T" будет равна 0. Поэтому сравнение $position!=false будет работать некорректно, ведь false и 0 при сравнении и приведении к общему типу будут представлять одно и то же значение. Поэтому в данном случае корректно использовать только операцию эквивалентности: $position!==false или $position===false .
Теперь применим функцию на другом примере:
$input = "Мама мыла раму"; $search = "мы"; $position = strpos($input, $search); // 9Неожиданно, но результатом функции будет число 9. Хотя мы видим, что истинная позиция подстроки "мы" в исходной строке равна 5.
Все дело в том, что некоторые строковые функции не всегда корректно обрабатывают кириллические символы, и для них лучше использовать другую функцию - mb_strpos() :
$position = mb_strpos($input, $search); // 5Функция strrpos()
Функция strrpos() во многом аналогична функции strpos() , только ищет позицию не первого, а последнего вхождения подстроки в строку:
$input = "This is the end"; $search = "is"; $position = strrpos($input, $search); // 5Но опять же данная функция не совсем корректно работает с кириллическими символами, поэтому нам надо использовать ее аналог - mb_strrpos() :
$position = mb_strrpos($input, $search);Функция trim()
Функция trim($str) удаляет из строки начальные и конечные пробелы, а также управляющие символы \n, \r, \t:
$input = " Мама мыла раму "; $input = trim($input);Изменение регистра
Для перевода строки в нижний регистр используется функция strtolower :
$input = "The World is Mine"; $input = strtolower($input);Для перевода в нижний регистр строки с кириллическими символами можно использовать функцию mb_strtolower :
$input = mb_strtolower($input);Для перевода строки в верхний регистр примеяются функции strtoupper() / mb_ strtoupper() , которые работают аналогично.
Функция strlen()
Функция strlen() возвращает длину строки, то есть количество символов в ней:
$input = "Hello world"; $num = strlen($input); echo $num;Функция strlen() также некорректно работает с кириллицей, поэтому в этом случае лучше применять функцию mb_strlen() :
$input = "Мама мыла раму"; $num = mb_strlen($input); echo $num;Получение подстроки
Применяя функцию substr($str, $start [, $length]) , можно получить из одной строки ее определенную часть. Данная функция обрезает строку $str, начиная c символа в позиции $start до конца строки. С помощью дополнительного необязательного параметра $length можно задать количество вырезаемых символов.
$input = "The world is mine!"; $subinput1 = substr($input, 2); $subinput2 = substr($input, 2, 6); echo $subinput1; echo "
"; echo $subinput2;Так как данная функция некорректно работает с кириллицей, то вместо нее следует применять функцию mb_substr() , которая действует аналогично:
$input = "Мама мыла раму"; $subinput1 = mb_substr($input, 2); $subinput2 = mb_substr($input, 2, 6);Замена подстрок
Для замены определенной части строки применяется функция str_replace($old, $new, $input) . Эта функция заменяет в строке $input все вхождения подстроки $old на подстроку $new с учетом регистра:
$input = "Мама мыла раму"; $input = str_replace("мы", "ши", $input); echo $input;Функции работы со строками на php
Когда из строки вам необходимо выделить отрывок заданной длины начиная с заданной позиции, на помощь приходит функция substr.
В этой функции через запятую передаются: текст, стартовая позиция и количество символов. Последний параметр не обязателен, и в случае его отсутствия результатом работы функции будет отрывок исходного текста от стартовой позиции до конца строки.
PHP функция strlen - узнать длину строки
Эта функция возвращает длину исходной строки в виде целого числа.
Этой функцией вы сможете проверить длину введенных пользователем данных, а может быть что-то еще.PHP функция trim - убрать лишние пробелы по краям строки
Функция trim удаляет по краям строки любые пробельные символы, в том числе и символ перевода строки. Так же существуют функции rtrim и ltrim, которые удаляют пробелы вконце иили вначале строки.
PHP функция strpos - осуществляет поиск в строке
функция strpos ищет подстроку в строке и в случае успеха возвращает позицию начала этой подстроки. После нахождения первой подстроки поиск прекращается.
Порядок аргументов в функции, как вы уже догодались, таков: исходная строка, подстрока, стартовая позиция. Третий параметр не обязателен, но постарайтесь запомнить что он есть.
PHP функция strip_tags - удаляет тэги HTML и PHP из строки
Функция strip_tags возвращает строку, очищенную от тегов html и php. Она вам пригодится, когда вы будете писать модуль комментариев на свой сайт, что бы не оставить злоумышленикам возможности взломать ваш сайт через форму.
html и php должны быть удалены'; echo strip_tags($text); echo strip_tags($text,'');//не удалять теги em ?>Первым аргуменом функции идет исходны текст, а вторым теги, которые не нжно удалять.
PHP функция strtolower - переводит строку в нижний регистр
PHP функция strtoupper - переводит строку в верхний регистр
Если этот сайт оказался вам полезен, пожалуйста, посмотрите другие наши статьи и разделы.
Работа со строками в PHP
Строка (тип string) - это набор символов, где символ - это то же самое, что и байт. Это значит, что PHP поддерживает ровно 256 различных символов, а также то, что в PHP нет встроенной поддержки Unicode.
Простейший способ определить строку - это заключить её в одинарные кавычки (символ ' ). Чтобы использовать одинарную кавычку внутри строки, проэкранируйте её обратным слешем ( \ ). Если необходимо написать сам обратный слеш, продублируйте его ( \\ ). Все остальные случаи применения обратного слеша будут интерпретированы как обычные символы: это означает, что если вы попытаетесь использовать другие управляющие последовательности, такие как \r или \n , они будут выведены как есть вместо какого-либо особого поведения.
Давайте рассмотрим частые примеры работы со строками в PHP.
Строковые операторы
Основными строковыми операторами являются конкатенация и присваивание с конкатенацией.
Конкатенация строк
Данные оператор позволяет объединить две и более строк в одну.
$str1 = 'У лукоморья дуб зелёный;'; $str2 = 'Златая цепь на дубе том'; $str = $str1 . ' ' . $str2; //Объединяем (склеиваем) 3 строки $str1, пробел и $str2 var_dump($str);string(87) "У лукоморья дуб зелёный; Златая цепь на дубе том"Присваивание с конкатенацией
Этот оператор позволяет "приклеить" строки более короткой записью. Изменим вышеуказанный пример:
$str1 = 'У лукоморья дуб зелёный;'; $str2 = 'Златая цепь на дубе том'; $str .= $str1; $str .= ' '; $str .= $str2; var_dump($str);Результат тот же самый:
string(87) "У лукоморья дуб зелёный; Златая цепь на дубе том"Данный пример может не очень хорошо отражает удобство этого метода. Но представьте что у вас есть массив строковых значений и вам нужно проверить его элементы и при определённых условиях собрать из них строку.
$str = ''; $arr = [ 'Строка 1 ', 'Строка 2 ', 'Строка 3 ', 'Строка 4 ', 'Строка 5 ' ]; foreach($arr as $item) < //некоторая проверка $str .= $item; >var_dump($str);string(75) "Строка 1 Строка 2 Строка 3 Строка 4 Строка 5 "Таким образом частом складывают SEO заголовок страницы фильтра в каталоге. Если посетитель отфильтровал каталог по ряду свойств, можно создать заголовок из заголовка раздела, названия и значения свойств.
Подсчёт символов в строке
Рассмотрим функции позволяющие сосчитать символы в строке.
Получить длину строки
Для этого используется функция strlen() принимающая саму строку, возвращает целое число, количество всех символов в строке. Если в строке есть кирилические символы в кодировке UTF-8, функция вернёт не правильный результат. Чтобы получить верную длину строки для кириллицы, используйте функцию mb_strlen() .
$str = 'У лукоморья дуб зелёный; Златая цепь на дубе том'; echo strlen($str) . '
'; echo mb_strlen($str) . '
';87 48Вообще для работы со строками в UTF-8 есть целый набор функций с префиксом mb .
Количество символов без пробелов
Тут придётся вначале подготовить исходную строку, путём замены пробелов на пустую строку функцией mb_ereg_replace() .
$str = 'У лукоморья дуб зелёный; Златая цепь на дубе том'; //заменяем в строке все пробелы $str = mb_ereg_replace('[\s]', '', $str); //Считаем поличество символов echo mb_strlen($str);Количество слов в строке
$str = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit'; //Считаем количество слов в строке $count = str_word_count($str); var_dump($count); // вернёт 8Функция str_word_count() не работает с кириллицей по умолчанию и не имеет "двойника" с префиксом mb_. Чтобы это исправить, нужно передать дополнительные аргументы, формат возвращаемых данных равный 2, в этом случае функция вернёт массив, а третий аргумент, строка с русским алфавитом в разном регистре.
//Не работает без доп.параметров для строк с кириллицей $str = 'У лукоморья дуб зелёный; Златая цепь на дубе том'; //Считаем количество слов в строке, результат будет в виде массива отдельных слов $arr = str_word_count($str, 2, 'АаБбВвГгДдЕеЁёЖжЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЪъЫыЬьЭэЮюЯя'); //Считаем количество элементов в массиве $count =count($arr) var_dump($count); //вернёт 9Количество переносов в строке
Тут потребуется функция substr_count() которая считает количество вхождений подстроки, в исходную строку. В качестве подстроки будем использовать PHP_EOL . PHP_EOL это константа принимающая значения корректного символа конца строки (переноса) на текущей платформе, где выполняется php скрипт.
$str = 'У лукоморья дуб зелёный; Златая цепь на дубе том: И днём и ночью кот учёный Всё ходит по цепи кругом;'; echo substr_count($str, PHP_EOL); // вернёт 3Количество букв в строке
Опять таки исходная строка требует внесения предварительных изменений.
//Исходная строка $str = 'У лукоморья дуб зелёный; Златая цепь на дубе том:'; //Оставляем только буквы в строке echo $str = preg_replace('/[^a-zа-яё]/ui', '', $str); //Считаем количестсво букв echo mb_strlen($str); // вернёт 39Количество цифр в строке
Аналогично предыдущему примеру, только теперь регулярное выражение заменит всё, что не является цифрой, на пустую строку.
//Исходная строка $str = 'У лукоморья дуб зелёный; Златая цепь на дубе том:'; //Оставляем только буквы в строке echo $str = preg_replace('/[^0-9]/ui', '', $str); //Считаем количестсво букв echo mb_strlen($str); // вернёт 0Количество знаков препинания
//Исходная строка $str = 'У лукоморья дуб зелёный; Златая цепь на дубе том:'; //Оставляем только буквы в строке echo $str = preg_replace('/[^[:punct:]]/', '', $str); //Считаем количестсво букв echo mb_strlen($str); // вернёт 2Количество пробелов в строке
//Исходная строка $str = 'У лукоморья дуб зелёный; Златая цепь на дубе том:'; echo substr_count($str, ' '); //Вернёт 8Поиск по строке
Рассмотрим различные методы поиска в строке.
Получить количество определённых слов в строке
//Исходная строка $str = 'У лукоморья дуб зелёный; Златая цепь на дубе том:'; echo mb_substr_count($str, 'Златая'); // 1Есть зависимость от регистра, т.е. вот так функция ничего не найдёт:
echo mb_substr_count($str, 'златая'); // 0Позиция первого вхождения подстроки в строку
Тут есть функция позволяющая игнорировать регистр символов
//Исходная строка $str = 'У лукоморья дуб зелёный; Златая цепь на дубе том:'; //С учётом регистра echo mb_strpos($str, 'Златая'); // 25 // Без учета регистра echo mb_stripos($str, 'златая'); // 25Позиция последнего вхождения подстроки в строку
Так же можно игнорировать регистр
//Исходная строка $str = 'У лукоморья дуб зелёный; Златая цепь на дубе том:'; //С учётом регистра echo mb_strrpos($str, 'дуб'); // 40 // Без учета регистра: echo mb_strrpos($str, 'дуб'); // 40Найти все вхождения подстроки
//Исходная строка $str = 'У лукоморья дуб зелёный; Златая цепь на дубе том:'; $offset = 0; $allpos = []; while (($position = mb_strpos($str, 'дуб', $offset)) !== false) < $offset = $position + 1; $allpos[] = $position; >echo ''; print_r($allpos); echo '';
Array ( [0] => 12 [1] => 40 )Обратите внимание на сравнение !== false, это сделано для того, чтобы учесть подстроку, если она будет в начале строки и её позиция будет равна 0. Такое сравнение позволяет исключить приведение 0 к false, что привело бы к логической ошибке.
Замена в строках
Функция substr_replace($search, $replace, $subject, $count) заменяет часть $search строки $subject на $replace . Она также не раотает с кирилицей в кодировке UTF-8, в библиатеке mb_string её нет, поэтому нам потребуется написать свой аналог:
/** * @param $original * @param $replacement * @param $position * @param $length * @return string */ function mb_substr_replace($original, $replacement, $position, $length)Замени часть строки
//Исходная строка $str = 'У лукоморья дуб зелёный; Златая цепь на дубе том:'; //Ищем подстроку "зелёный" и заменяем её на "красный" var_dump(mb_substr_replace($str, 'красный', mb_strpos($str, 'зелёный'), mb_strlen('зелёный')));string(88) "У лукоморья дуб красный; Златая цепь на дубе том:"Замена символов и слов в строке
В php есть функция str_replace($search, $replace, $subject) которая будет сама осуществлять поиск вхождения, расчёт длины строки и при этом, она будет работаь со всеми кодировками.
Замена пробелов в строке
//Исходная строка $str = 'У лукоморья дуб зелёный; Златая цепь на дубе том:'; echo str_replace(' ', '*', $str); // У*лукоморья*дуб*зелёный;*Златая*цепь*на*дубе*том:Замена до определённого символа
//Исходная строка $str = 'У лукоморья дуб зелёный; Златая цепь на дубе том:'; $str = 'Зелёный дуб у лукоморья' . mb_substr($str, mb_strpos($str, '; '), -1); echo $str; //Зелёный дуб у лукоморья; Златая цепь на дубе томСобственно все операции со строками крутятся вокруг десятка функций, которые позволяют найти подстроки, полуить их позицию и длину, а дальше можно модифицировать строки, склеивать из них другие строки, удалять ненужное (так например работают фильтры ненормативной лексики).
Смотрите также
Для получения информации о более сложной обработке строк обратитесь к функциями Perl-совместимых регулярных выражений. Для работы с многобайтовыми кодировками посмотрите на функции по работе с многобайтовыми кодировками.
User Contributed Notes 24 notes
2 years ago
I'm converting 30 year old code and needed a string TAB function:
//tab function similar to TAB used in old BASIC languages
//though some of them did not truncate if the string were
//longer than the requested position
function tab($instring="",$topos=0) if(strlen($instring) <$topos)$result=str_pad($instring,$topos-1," ",STR_PAD_RIGHT);
>else $result=substr($instring,0,$topos-1);
>
return $result;
>$pline="String with this tab to 50 and";
$tline=tab($pline,50)."finish it.";
echo $tline.PHP_EOL;
$pline="101010101020202020203030303030404040404050505050506060606060";
$tline=tab($pline,50)."finish it.";
echo $tline.PHP_EOL;//Results in this output:
//String with this tab to 50 and finish it.
//1010101010202020202030303030304040404040505050505finish it.18 years ago
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:
function strnposr ( $haystack , $needle , $occurance , $pos = 0 ) return ( $occurance < 2 )? strpos ( $haystack , $needle , $pos ): strnposr ( $haystack , $needle , $occurance - 1 , strpos ( $haystack , $needle , $pos ) + 1 );
>
?>18 years ago
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.
function strnpos ( $haystack , $needle , $occurance , $pos = 0 )
for ( $i = 1 ; $i $pos = strpos ( $haystack , $needle , $pos ) + 1 ;
>
return $pos - 1 ;?>
Example: Give me everything up to the fourth occurance of '/'.
$haystack = "/home/username/www/index.php" ;
$needle = "/" ;$root_dir = substr ( $haystack , 0 , strnpos ( $haystack , $needle , 4 ));
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!
18 years ago
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:$s1
";
# 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);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] . "]
";
$ret=str_replace('$' . $myvar, $vardata[$myvar], $ret);
>
return $ret;19 years ago
//
// string strtrmvistl( string str, [int maxlen = 64],
// [bool right_justify = false],
// [string delimter = "
\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 = "
\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);
>18 years ago
A comprehensive concatenation function, that works with array and strings
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 :
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
)$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.
19 years ago
Here's a simpler "simplest" way to toggle through a set of 1..n colors for web backgrounds:
$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.
18 years ago
In response to hackajar
yahoo 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.
10 years ago
I was looking for a function to find the common substring in 2 different strings. I tried both the mb_string_intersect and string_intersect functions listed here but didn't work for me. I found the algorithm at http://en.wikibooks.org/wiki/Algorithm_implementation/Strings/Longest_common_substring#PHP so here I post you the function
/**
* Finds the matching string between 2 strings
*
* @param string $string1
* @param string $string2
* @param number $minChars
*
* @return NULL|string
*
* @link http://en.wikibooks.org/wiki/Algorithm_implementation/Strings/Longest_common_substring#PHP
*/
function string_intersect ( $string_1 , $string_2 )
$string_1_length = strlen ( $string_1 );
$string_2_length = strlen ( $string_2 );
$return = "" ;if ( $string_1_length === 0 || $string_2_length === 0 ) // No similarities
return $return ;
>// Initialize the CSL array to assume there are no similarities
for ( $i = 0 ; $i < $string_1_length ; $i ++) $longest_common_subsequence [ $i ] = array();
for ( $j = 0 ; $j < $string_2_length ; $j ++) $longest_common_subsequence [ $i ][ $j ] = 0 ;
>
>for ( $i = 0 ; $i < $string_1_length ; $i ++) for ( $j = 0 ; $j < $string_2_length ; $j ++) // Check every combination of characters
if ( $string_1 [ $i ] === $string_2 [ $j ]) // These are the same in both strings
if ( $i === 0 || $j === 0 ) // It's the first character, so it's clearly only 1 character long
$longest_common_subsequence [ $i ][ $j ] = 1 ;
> else // It's one character longer than the string from the previous character
$longest_common_subsequence [ $i ][ $j ] = $longest_common_subsequence [ $i - 1 ][ $j - 1 ] + 1 ;
>if ( $longest_common_subsequence [ $i ][ $j ] > $largest_size ) // Remember this as the largest
$largest_size = $longest_common_subsequence [ $i ][ $j ];
// Wipe any previous results
$return = "" ;
// And then fall through to remember this new value
>if ( $longest_common_subsequence [ $i ][ $j ] === $largest_size ) // Remember the largest string(s)
$return = substr ( $string_1 , $i - $largest_size + 1 , $largest_size );
>
>
// Else, $CSL should be set to 0, which it was already initialized to
>
>// Return the list of matches
return $return ;
>17 years ago
Here's an easier way to find nth.
there is is no need to check if the user has entered a non-integer as we may be using this function for expressing variables as well eg. ith value of x , nth root of z ,etc.
18 years ago
/*
Written By James Baker, May 27th 2005?php
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 ;17 years ago
stripos for PHP4.x
function stripos ( $haystack , $needle ) return strpos ( strtoupper ( $haystack ), strtoupper ( $needle ));
>
?>17 years ago
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.
18 years ago
to: james dot d dot baker at gmail dot com
PHP has a builtin function for doing what your function does,
15 years ago
Just a note in regards to bloopletech a few posts down:
The word "and" should not be used when converting numbers to text. "And" (at least in US English) should only be used to indicate the decimal place.
Example:
1,796,706 => one million, seven hundred ninety-six thousand, seven hundred six.
594,359.34 => five hundred ninety four thousand, three hundred fifty nine and thirty four hundredths19 years ago
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 ) );
>16 years ago
Here is a truly random string generator it uses the most common string functions it will work on anywhere.
function random_string ( $max = 20 ) $chars = explode ( " " , "a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8 9" );
for( $i = 0 ; $i < $max ; $i ++)$rnd = array_rand ( $chars );
$rtn .= base64_encode ( md5 ( $chars [ $rnd ]));
>
return substr ( str_shuffle ( strtolower ( $rtn )), 0 , $max );
>
?>16 years ago
Regarding the code for the function beginsWith($str, $sub), I found that it has problems when only one character is present after the string searched for. I found that this works better instead:
function beginsWith ( $str , $sub ) return ( strncmp ( $str , $sub , strlen ( $sub )) == 0 );
>
?>15 years ago
If you want a function to return all text in a string up to the Nth occurrence of a substring, try the below function.
Works in PHP >= 5.
(Pommef provided another sample function for this purpose below, but I believe it is incorrect.)
// Returns all of $haystack up to (but excluding) the $n_occurrence occurrence of $needle. Therefore:
// If there are < $n_occurrence occurrences of $needle in $haystack, the entire string will be returned.
// If there are >= $n_occurrence occurrences of $needle in $haystack, the returned string will end before the $n_occurrence'th needle.
// This function only makes sense for $n_occurrence >= 1
function nsubstr ( $needle , $haystack , $n_occurrence )
// After exploding by $needle, every entry in $arr except (possibly) part of the last entry should have its content returned.
$arr = explode ( $needle , $haystack , $n_occurrence );
// Examine last entry in $arr. If it contains $needle, cut out all text except for the text before $needle.
$last = count ( $arr ) - 1 ;
$pos_in_last = strpos ( $arr [ $last ], $needle );if ( $pos_in_last !== false )
$arr [ $last ] = substr ( $arr [ $last ], 0 , $pos_in_last );return implode ( $needle , $arr );
>print 'S: ' . $string . '
' ;
print '1: ' . nsubstr ( '24' , $string , 1 ) . '
' ;
print '2: ' . nsubstr ( '24' , $string , 2 ) . '
' ;
print '3: ' . nsubstr ( '24' , $string , 3 ) . '
' ;
print '4: ' . nsubstr ( '24' , $string , 4 ) . '
' ;
print '5: ' . nsubstr ( '24' , $string , 5 ) . '
' ;
print '6: ' . nsubstr ( '24' , $string , 6 ) . '
' ;
print '7: ' . nsubstr ( '24' , $string , 7 ) . '
' ;/*
// prints:
S: d24jkdslgjldk2424jgklsjg24jskgldjk24
1: d
2: d24jkdslgjldk
3: d24jkdslgjldk24
4: d24jkdslgjldk2424jgklsjg
5: d24jkdslgjldk2424jgklsjg24jskgldjk
6: d24jkdslgjldk2424jgklsjg24jskgldjk24
7: d24jkdslgjldk2424jgklsjg24jskgldjk24
*/?>
Note that this function can be combined with wordwrap() to accomplish a routine but fairly difficult web design goal, namely, limiting inline HTML text to a certain number of lines. wordwrap() can break your string using
, and then you can use this function to only return text up to the N'th
.You will still have to make a conservative guess of the max number of characters per line with wordwrap(), but you can be more precise than if you were simply truncating a multiple-line string with substr().
$text = 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Pellentesque id massa. Duis sollicitudin ipsum vel diam. Aliquam pulvinar sagittis felis. Nullam hendrerit semper elit. Donec convallis mollis risus. Cras blandit mollis turpis. Vivamus facilisis, sapien at tincidunt accumsan, arcu dolor suscipit sem, tristique convallis ante ante id diam. Curabitur mollis, lacus vel gravida accumsan, enim quam condimentum est, vitae rutrum neque magna ac enim.' ;
$wrapped_text = wordwrap ( $text , 100 , '
' , true );$three_lines = nsubstr ( '
' , $wrapped_text , 3 );$four_lines = nsubstr ( '
' , $wrapped_text , 4 );Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Pellentesque id massa. Duis sollicitudin
ipsum vel diam. Aliquam pulvinar sagittis felis. Nullam hendrerit semper elit. Donec convallis
mollis risus. Cras blandit mollis turpis. Vivamus facilisis, sapien at tincidunt accumsan, arcuLorem ipsum dolor sit amet, consectetuer adipiscing elit. Pellentesque id massa. Duis sollicitudin
ipsum vel diam. Aliquam pulvinar sagittis felis. Nullam hendrerit semper elit. Donec convallis
mollis risus. Cras blandit mollis turpis. Vivamus facilisis, sapien at tincidunt accumsan, arcu
dolor suscipit sem, tristique convallis ante ante id diam. Curabitur mollis, lacus vel gravida17 years ago
I've prepared this simple function to obtain a string delimited between tags (not only XML tags!). Anybody needs something like this?.
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.com18 years ago
/**
Utility class: static methods for cleaning & escaping untrusted (i.e.
user-supplied) strings.?php
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 );
>
>
?>18 years ago
/*
* 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 ;
>?php
/*
* 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' ;
?>
