Word перенос строки php
Библиотека PHPWord, находящаяся уже почти год в стадии бета-тестирования 1) , предоставляет возможность создания сложных документов формата OOXML (*.docx). Рассмотрим основные возможности этой библиотеки. Для начала работы достаточно распаковать архив с библиотекой в каталог с создаваемым вами документом PHP и подгрузить основной класс библиотеки, расположенный в файле PHPWord.php:
Свойства документа и шрифт по-умолчанию
Создание документа начинается с объявления экземпляра класса PHPWord. Конструктор не требует передачи аргументов:
Далее следует задать название и размер шрифта по-умолчанию:
В рассматриваемой версии до применения указанных выше функций шрифтом по-умолчанию является Arial размером 20 пунктов. Теперь можно задать время создания документа, имя автора и так далее:
По-умолчанию в качестве даты создания и изменения документа указывается текущее время, а остальные свойства заполняются пустыми значениями. Если требуется указать конкретную дату создания или изменения, используйте функцию mktime или любую другую функцию, возвращающую время в стиле Unix.
Создание разделов
Основным элементом документа Word является Раздел. Раздел представляет собой прямоугольную область, внутри которой помещаются остальные элементы страницы: текст, изображения, таблицы и т.д.
Раздел может иметь книжную или альбомную ориентацию, настраиваемые поля (margins), настраиваемые цвета границ раздела и их толщину (на рисунке показана пунктиром):
Параметр | Описание |
---|---|
orientation | Ориентация страницы: null - книжная ориентация, landscape - альбомная |
marginTop | Размер верхнего поля во внутренних единицах |
marginRight | Размер правого поля во внутренних единицах |
marginBottom | Размер нижнего поля во внутренних единицах |
marginLeft | Размер левого поля во внутренних единицах |
borderTopSize | Толщина верхнего края рамки во внутренних единицах |
borderRightSize | Толщина правого края рамки во внутренних единицах |
borderBottomSize | Толщина нижнего края рамки во внутренних единицах |
borderLeftSize | Толщина левого края рамки во внутренних единицах |
borderTopColor | Цвет верхнего края рамки в шестнадцатеричном формате |
borderRightColor | Цвет правого края рамки в шестнадцатеричном формате |
borderBottomColor | Цвет нижнего края рамки в шестнадцатеричном формате |
borderLeftColor | Цвет левого края рамки в шестнадцатеричном формате |
Для создания раздела существует функция createSection. В качестве внутренних единиц используются типографские твипы. Если вам непривычно указывать размеры в твипах, можно написать простую функцию, преобразующую миллиметры в твипы:
Указанные в таблице параметры могут быть переданы в виде массива при создании раздела.
. или могут быть установлены по-отдельности после создания раздела:
Добавление текста
Добавление блока текста
Под блоком текста понимается отрывок текста, имеющий одинаковое форматирование (цвет, размер шрифта и т.п.). Для создания блока текста в выбранном разделе используйте функцию addText:
Здесь $text - добавляемый текст, необязательный параметр $fontStyle - имя определенного ранее текстового стиля, необязательный параметр $paragraphStyle - имя определенного ранее стиля абзаца.
Изменение форматирования текста
Форматирование текста, как и форматирование раздела, может осуществляться при его создании.
. или устанавливается после создания предназначенными для этого методами:
Ниже приведен полный список доступных параметров форматирования текста:
Параметр | Описание |
---|---|
size | Размер шрифта в типографских пунктах |
name | Название шрифта (кегль) |
bold | Является ли текст полужирным (true\false) |
italic | Выделен ли текст курсивом (true\false) |
superScript | Является ли текст надстрочным (true\false) |
subScript | Является ли текст подстрочным (true\false) |
underline | Вид подчеркивания 2) из набора констант PHPWord_Style_Font: UNDERLINE_NONE - нет подчеркивания, UNDERLINE_DASHHEAVY - жирная штриховая линия, UNDERLINE_DASHLONG - удлиненная штриховая линия, UNDERLINE_DASHLONGHEAVY - удлиненная жирная штриховая линия, UNDERLINE_DOUBLE - двойная линия, UNDERLINE_DOTHASH 3) - штрих-пунктир, UNDERLINE_DOTHASHHEAVY - жирный штрих-пунктир, UNDERLINE_DOTDOTDASH - две точки + тире, UNDERLINE_DOTDOTDASHHEAVY - жирные две точки + тире, UNDERLINE_DOTTED - пунктир, UNDERLINE_DOTTEDHEAVY - жирный пунктир, UNDERLINE_SINGLE - одинарная линия, UNDERLINE_WAVY - волнистая линия, UNDERLINE_WAVYDOUBLE - двойная волнистая линия, UNDERLINE_WAVYHEAVY - тройная волнистая линия, UNDERLINE_WORDS - подчеркивать только слова (не подчеркивать пробелы) |
Color | Цвет шрифта в шестнадцатеричном формате |
fgColor | Цвет выделения маркером из набора констант PHPWord_Style_Font: FGCOLOR_YELLOW - желтый, FGCOLOR_LIGHTGREEN - ярко-зеленый, FGCOLOR_CYAN - бирюзовый, FGCOLOR_MAGENTA - лиловый, FGCOLOR_BLUE - синий, FGCOLOR_RED - красный, FGCOLOR_DARKBLUE - темно-синий, FGCOLOR_DARKCYAN - сине-зеленый, FGCOLOR_DARKGREEN - темно-зеленый, FGCOLOR_DARKMAGENTA - фиолетовый, FGCOLOR_DARKRED - темно-красный, FGCOLOR_DARKYELLOW - коричнево-зеленый, FGCOLOR_DARKGRAY - серый 50%, FGCOLOR_LIGHTGRAY - серый 25%, FGCOLOR_BLACK - черный |
Названия параметров должны употребляться с соблюдением регистра. В случае параметров underline и fgColor применение значений, не указанных в таблице, не допускается.
Cписок доступных параметров форматирования абзаца:
Параметр | Описание |
---|---|
align | Выравнивание текста в абзаце: left - по левому краю, right - по правому краю, center - по центру, both или justify - по ширине |
spaceBefore | Отступ абзаца сверху в твипсах |
spaceAfter | Отступ абзаца снизу в твипсах |
spacing | Интервал между строк в твипсах |
Определение стилей текста и абзаца
Вместо того, чтобы каждый раз передавать в функцию createText массив с параметрами, вы можете создать именованный стиль, а затем указывать только название этого стиля:
Здесь $styleName - заданное вами имя стиля, $fontStyle - массив, содержащий определение стиля. После создания стиля его имя можно использовать при создании блоков текста, например:
Аналогичным образом осуществляется создание стиля абзаца:
Группировка блоков текста в абзац
Блоки текста с различным форматированием могут быть объединены в абзац заданного вида. Для этого применяется команда createTextRun:
Необязательный параметр $paragraphStyle - массив со стилем абзаца или название созданного ранее именованного стиля.
Добавление заголовков
В библиотеке имеются отдельные функции для добавления заголовков (addTitle) и задания их стилей (addTitleStyle). Применение заголовков вместо форматированных блоков текста необходимо в том случае, если вы хотите добавить в документ автоматически создаваемое оглавление, поскольку в оглавление включаются только заголовки, а не обычные блоки текста. При добавлении заголовков создание стилей заголовков обязательно:
Здесь $titleLevel - уровень заголовка, для которого задается стиль (обычно от 1 до 6), $fontStyle - массив со стилем форматирования заголовка, $paragraphStyle - массив со стилем форматирования абзаца. Как видите, форматирование можно не трогать, но сам стиль заголовка требуемого уровня должен быть обязательно создан. Добавление заголовка делается так:
По-умолчанию создается заголовок 1 уровня.
Добавление ссылок
Добавление ссылок мало чем отличается от добавления обычного текста. Для добавления ссылки используется команда:
Разрыв строки и страницы
Для принудительного переноса строки используйте синтаксис:
Необязательный параметр $num, по-умолчанию равный 1, указывает сколько переносов строки необходимо сделать. Для принудительной вставки разрыва страницы выполните:
Добавление оглавления
Для добавления оглавления используется функция addTOC:
Здесь $fontStyle - форматирование текста, определенное одним из ранее указанных способов, $tocStyle - массив со стилем оформления оглавления, возможные параметры которого приведены в таблице: ^ Параметр ^ Описание ^
tabLeader | Заполнитель между заголовком и номером страницы из набора констант PHPWord_Style_TOC : TABLEADER_DOT - точки, TABLEADER_UNDERSCORE - символ подчеркивания, TABLEADER_LINE - линия, TABLEADER_NONE - нет заполнителя |
tabPos | Положение номера страницы в твипсах |
Indent | Отступ заголовков в твипсах |
Добавление списков
Присутствует возможность добавления нумерованных и ненумерованных списков в документ. Для добавления элемента списка используйте код:
Здесь $text - текст добавляемого элемента списка, $depth - глубина вложенности элемента в списке (от 1 до 9, по-умолчанию равна 1), $textStyle - форматирование текста списка одним из предложенных ранее способов, $listStyle - форматирование самого списка при помощи массива параметров, $paragraphStyle - форматирование абзаца. На данный момент не существует функции addListStyle, поскольку у списков пока может изменяться только один параметр:
Параметр | Описание |
---|---|
listType | Вид списка из набора констант PHPWord_Style_ListItem: TYPE_NUMBER - одноуровневый нумерованный список, TYPE_NUMBER_NESTED - многоуровневый нумерованный список, TYPE_BULLET_FILLED - ненумерованный список с маркерами в виде закрашенных кругов, TYPE_BULLET_EMPTY - ненумерованный список с маркерами в виде незакрашенных кругов, TYPE_SQUARE_FILLED - ненумерованный список с маркерами в виде закрашенных квадратов |
Добавление таблиц
Важной частью документа Word являются таблицы. Для создания таблицы в PHPWord выполните:
Необязательный аргумент $tableStyle - массив с описанием стиля таблицы или название такового, определенного методом addTableStyle:
Аргументы: $styleName - название стиля, $tableStyle - массив с определением стиля, $firstRowStyle - массив с определением стиля ячеек 1 строки (шапки) таблицы. Ниже приведена таблица возможных стилевых параметров таблицы в целом: ^ Параметр ^ Описание ^
cellMarginTop | Отступ от ячейки сверху в твипсах |
cellMarginRight | Отступ от ячейки справа в твипсах |
cellMarginBottom | Отступ от ячейки снизу в твипсах |
cellMarginLeft | Отступ от ячейки слева в твипсах |
Теперь в созданную таблицу можно добавить ячейки. Как и в XHTML, вначале нужно создать строку.
. затем добавить ячейки и заполнить их форматированным текстом.
. или сделать то же самое одной командой.
. или вместо простого текста добавить изображения, списки ссылки одной из следующих команд:
Команда | Действие |
---|---|
addText | Добавить форматированный текст |
addTextBreak | Добавить перенос строки |
addLink | Добавить ссылку |
addListItem | Добавить элемент списка |
addImage | Добавить изображение из файла |
addMemoryImage | Добавить динамически сгенерированное изображение |
addObject | Добавить объект OLE |
addPreserveText | Добавить поле (например, нумерацию страниц) |
Как вы уже, наверное, догадались, параметр $rowHeight - позволяет задать высоту в твипсах создаваемой строки, $cellWidth - ширину ячейки (столбца), а $cellStyle - изменить форматирование ячейки. При форматировании ячейки поддерживаются следующие параметры:
Параметр | Описание |
---|---|
valign | Выравнивание в ячейке по-вертикали: both - по-вертикали по ширине, top - по верхнему краю, bottom - по нижнему краю, center - по-центру |
textDirection | Направление текста из набора констант PHPWord_Style_Cell: TEXT_DIR_BTLR - развернут на 90 градусов против часовой стрелки, TEXT_DIR_TBRL - развернут на 90 градусов по часовой стрелке |
bgColor | Цвет фона ячейки в шестнадцатеричном формате |
borderTopSize | Толщина верхней границы ячейки в твипсах |
borderRightSize | Толщина правой границы ячейки в твипсах |
borderBottomSize | Толщина нижней границы ячейки в твипсах |
borderLeftSize | Толщина левой границы ячейки в твипсах |
borderTopColor | Цвет верхней границы ячейки в шестнадцатеричном формате |
borderRightColor | Цвет правой границы ячейки в шестнадцатеричном формате |
borderBottomColor | Цвет нижней границы ячейки в шестнадцатеричном формате |
borderLeftColor | Цвет левой границы ячейки в шестнадцатеричном формате |
Добавление изображений
PHPWord позволяет добавлять в создаваемый документ изображения 2 типов: из файла (метод addImage) и динамически сгенерированное сценарием изображение (метод addMemoryImage). Поддерживаются файлы форматов jpg, png, gif, tiff, bmp. Примеры применения методов:
Здесь $src и $url - соответственно путь к файлу и абсолютный путь к сценарию (с адресом сайта и промежуточных каталогов), $imageStyle - массив с форматированием изображения. Поддерживаемые параметры форматирования:
Параметр | Описание |
---|---|
width | Требуемая ширина изображения в пикселях |
height | Требуемая высота изображения в пикселях |
align | Горизонтальное выравнивание изображения: left - по левому краю, right - по правому краю, center - по центру |
Если требуемые размеры изображения не указаны - библиотека пытается определить фактические размеры изображения при помощи функции [php>getimagesize|getimagesize]].
Добавление объектов OLE
С помощью метода addObject вы можете внедрить в создаваемый документ фрагмент другого документа (*.docx, *.xlsx, *.pptx) при помощи технологии OLE:
Массив $objectStyle может содержать только один параметр:
Параметр | Описание |
---|---|
align | Выравнивание объекта по-горизонтали: left - по левому краю, right - по правому краю, center - по центру |
Колонтитулы
Каждый раздел документа может иметь свой верхний (header) и нижний (footer) колонтитул, отображаемый на всех принадлежащих ему страницах. С точки зрения Word колонтитул является особым видом раздела, поэтому к колонтитулу применимо большинство описанных выше методов: addText, createTextRun, addTextBreak, addImage, addMemoryImage, addListItem, addTable. Кроме этого колонтитул имеет собственный метод addPreserveText, позволяющий создавать нумерацию страниц. Пример создания верхнего (createHeader) и нижнего (createFooter) колонтитула:
Как и всегда форматирование текста колонтитула и абзаца являются необязательными параметрами.
Использование шаблонов
Библиотека PHPWord поддерживает еще один интересный метод создания документов Word - использование шаблонов. Подробный принцип работы при генерировании документов из шаблонов описан в статье docx-templates. В качестве метки в PHPWord используется комбинация $ , где NAME - имя метки. Пример генерирования с использованием меток:
Сохранение файла
Сохранение файла на жесткий диск:
Пример
Подытоживая все вышесказанное хочется привести пример, в котором проиллюстрировано применение большинства возможностей библиотеки PHPWord:
Текст примера появится несколько позже, когда автор сможет сгенерировать документ с кириллицей (на английском работает). Проблема связана с функцией utf8_encode, используемой в PHPWord. Если у вас есть решение этой проблемы, просьба отписаться. Update! Проблема с функцией utf8_encode и кириллической кодировкой решается если заменить функцию на iconv и указать входящую кодировку CP1251 и выходе UTF8. Сделать это надо во всех местах библиотеки где используется функция utf8_encode.Данный пример в работе можно посмотреть по этой ссылке. В заключение хотелось бы отметить, что для сайтов, где структура docx-файла слабо 4) зависит от входных данных, рекомендуемым способом стоит считать docx-templates, поскольку:
Для получения информации о более сложной обработке строк обратитесь к функциями Perl-совместимых регулярных выражений. Для работы с многобайтовыми кодировками посмотрите на функции по работе с многобайтовыми кодировками.
Содержание
User Contributed Notes 24 notes
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.
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.
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 ) );
>
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!";
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 hundredths
<?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' ;
?>
<?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 );
>
>
?>
Example: Give me everything up to the fourth occurance of '/'.
$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 );
>
?>
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 );
>
?>
to: james dot d dot baker at gmail dot com
PHP has a builtin function for doing what your function does,
//
// 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);
>
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 <= $occurance ; $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!
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.
Here's a simpler "simplest" way to toggle through a set of 1..n colors for web backgrounds:
// 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.
Here's an easier way to find nth.
function nth($numbex) if ($numbex%10 == 1 && $numbex%100 != 11) $sth='st';
elseif ($numbex%10 == 2 && $numbex%100 != 12) $sth='nd';
elseif ($numbex%10 == 3 && $numbex%100 != 13) $sth='rd';
else $sth = 'th';
return $sth;
>
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.
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 ;
>
stripos for PHP4.x
<?php
function stripos ( $haystack , $needle ) return strpos ( strtoupper ( $haystack ), strtoupper ( $needle ));
>
?>
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
)
<?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)
Here is a truly random string generator it uses the most common string functions it will work on anywhere.
<?php
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 );
>
?>
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:
<?php
function beginsWith ( $str , $sub ) return ( strncmp ( $str , $sub , strlen ( $sub )) == 0 );
>
?>
<?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 ;
>
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.)
if ( $pos_in_last !== false )
$arr [ $last ] = substr ( $arr [ $last ], 0 , $pos_in_last );
return implode ( $needle , $arr );
>
print 'S: ' . $string . '<br>' ;
print '1: ' . nsubstr ( '24' , $string , 1 ) . '<br>' ;
print '2: ' . nsubstr ( '24' , $string , 2 ) . '<br>' ;
print '3: ' . nsubstr ( '24' , $string , 3 ) . '<br>' ;
print '4: ' . nsubstr ( '24' , $string , 4 ) . '<br>' ;
print '5: ' . nsubstr ( '24' , $string , 5 ) . '<br>' ;
print '6: ' . nsubstr ( '24' , $string , 6 ) . '<br>' ;
print '7: ' . nsubstr ( '24' , $string , 7 ) . '<br>' ;
/*
// 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 <br>, and then you can use this function to only return text up to the N'th <br>.
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 , '<br>' , true );
$three_lines = nsubstr ( '<br>' , $wrapped_text , 3 );
$four_lines = nsubstr ( '<br>' , $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, arcu
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
Читайте также: