Напоследък дискусии PHP езикна хабре се свеждат повече до способността да се проектират сложни системи, което е добра новина. Въпреки това, след като прегледах дузина от най-известните уеб рамки (Zend Framework, Adept, CakePHP, CodeIgniter, LIMB, Symfony, MZZ и други), бях искрено изненадан да открия някои съществени недостатъци по отношение на елементарната оптимизация.

За да бъде тази тема по-техническа насоченост, резултатите са представени в по-стриктна форма, което може донякъде да усложни възприемането.

И така, да тръгваме ... Задачата е изключително проста: да се провеждат експерименти върху скоростта на формиране на низове от поднизове в единични и двойни кавички. По принцип този въпрос все още ще бъде актуален за дълго времепоради особеностите на обработката на низове в PHP.

Има много статии за основна оптимизация на скриптове както на руски, така и на други езици. Малко се казва за низовете, но се отбелязва фактът на "разбор" на низове в двойни кавички за променливи и контролни знаци (обаче, както в официалната документация). Въз основа на това е логично да се предположи, че използването на низове в двойни кавички по време на работа ще бъде малко по-бавно от същите операции с поднизове в единични кавички.

В допълнение към заместването на променливи в низове и свързването на променливи с поднизове, PHP прилага поне още един начин за формиране на низове: използване на функцията sprintf. Логично е да се предположи, че този методще бъдат значително по-лоши от "стандартните" поради допълнително извикване на функция и анализ на низове вътре.

Единственото допълнение, преди да ви представя кода на тестовия скрипт: трябва да имате предвид 2 възможни вариантиработа с низове в двойни кавички: като се има предвид простият и "напреднал" стил на кодиране. Фактът, че променливите са в самото начало на редовете, вероятно не си струва да се обръща внимание - те са само примери:
$string = "$_SERVER["HTTP_HOST"] не е администрацията на Уляновска област. Обичаме руския език и не харесваме тези, които го говорят..."
и
$string = "($_SERVER["HTTP_HOST"]) не е администрацията на Уляновска област. Ние обичаме руския език и не харесваме тези, които го говорят..."

Тест номер едно.
Е, изглежда, че всички резервации са направени - време е да покажем резултатите от работата. Източниктестер може да се намери.

Екранните снимки показват, че моята хипотеза не е потвърдена. Предположението за работа с низове чрез sprintf се оказа единственото правилно. Най-бързи бяха функциите, които работят с двойни кавички.

След кратък размисъл върху ситуацията обяснението дойде от само себе си: цялата работа е, че референтният низ, в който са направени заместванията, е твърде кратък: анализаторът, преминаващ през такъв низ, е маловажен въпрос. Но дори и тук е ясно, че родното заместване на променлива в низ дава предимство пред "разширения стил".
Това е и слабостта на подхода на конкатенация: обемът на вмъкнатите данни надвишава обема на поднизовете. Откъде идват режийните можете да прочетете във вече споменатата хабратопика.

Въпреки това дори тези мисли трябваше да бъдат потвърдени. За това беше необходим втори тест с промени във възможните причини, посочени за такова непредвидимо (за мен) поведение. Очевидно много неща са променени в петата версия (признавам, че в петата версия на php проведох само 1 тест: за заобикаляне на елементи от масив).

Тест номер две.
Втората хипотеза е, че удължаването на референтния низ в крайна сметка ще увеличи процента на тестерните функции, свързани с формирането на низове в двойни кавички, спрямо резултатите от тест номер 1. Същата ситуация, теоретично, трябва да се наблюдава по отношение на операцията на функцията sprintf. Това се дължи на първо място на необходимостта от анализ на низове и увеличаването на времето, прекарано за него. В ситуацията с конкатенацията на поднизове в единични кавички, мисля, че резултатът ще бъде приблизително същият като в първия тест, което ще доведе до леко намаляване на съотношението на времето за изпълнение на функцията quotes_3() до момента на целия скрипт (но без увеличение на производителността).

Заключенията всъщност са само положителни и потвърждават хипотезата. Когато референтният низ е леко увеличен, има голямо натоварване, което води до спад в производителността на функциите за двойни кавички и sprintf.

Предположението за низове в единични кавички също се оказа правилно: вместо 36,75% от времето в първия тест, във втория функцията quotes_3() отне 33,76% от времето за изпълнение на скрипта

практическа стойност.
С прости думи, абстрахирайки се от данните, можем да заключим: какво по-дълъг низ, в които е необходимо да се извърши заместване, толкова по-вероятно е операцията по конкатенация да бъде завършена по-бързо, отколкото търсенето на променлива в двойни кавички. Доброволците могат да се опитат да изберат необходимите параметри за вмъкване (брой променливи, дължина на референтния низ, дължини на низовете в променливите), така че да удовлетворяват равенството на времената за изпълнение.

Това всъщност е всичко. Остава само да добавим, че в програмирането няма дреболии (това е за тези, които обичат да казват „спестяване на мачове“ (c) Adelf). Познавайки такива тънкости и като ги вземете предвид, можете да напишете код, който ще бъде оптимизиран на всичките му нива;)

ПС:
Тестове, извършени с помощта на Zend Studio за Eclipse 6.0.0 (включен Debugger + Profiler).
PHP версия 5.2.5
Debian Linux OS

PPS:
Ще се радвам, ако някой публикува резултатите от тези тестове. Мисля, че това ще позволи по-обективна оценка на необходимостта от използване на един или друг метод за заместване в низове. Ще бъда благодарен и за здравословна критика към стила на представяне и дизайн.

(PHP 4, PHP 5, PHP 7)

str_replace- Заменя всички срещания на низа за търсене със заместващия низ

Описание

Тази функция връща низ или масив с всички появявания на търсене в тема, заменени от replace.

Ако не се нуждаете от сложни правила за намиране/замяна (като регулярни изрази), тази функция е за предпочитане. preg_replace().

Списък с параметри

Ако търсенето и замяната са масиви, тогава str_replace()използва всяка стойност от съответния масив за търсене и замяна в тема. Ако има по-малко елементи в заместващия масив, отколкото в търсенето, празният низ ще се използва като заместващ низ за останалите стойности. Ако търсенето е масив и replace е низ, тогава този заместващ низ ще се използва за всеки елемент от масива за търсене. Обратният случай няма смисъл.

Ако търсенето или замяната са масиви, техните елементи ще бъдат обработени от първия до последния.

Стойността, която търсите, известна още като игла(игла). Можете да използвате масив за множество стойности за търсене.

Сменете

Стойността за заместване ще се използва за замяна на търсените стойности за търсене. Можете да използвате масив за множество стойности.

предмет

Низът или масивът за търсене и замяна, известен още като купа сено(куп сено).

Ако subject е масив, тогава търсенето и замяната ще бъдат извършени на всеки елемент от subject и резултатът от функцията също ще бъде масив.

Ако бъде приет, ще бъде зададен броят на направените замени.

Върнати стойности

Тази функция връща низ или масив със заместени стойности.

Примери

Пример #1 Примери за използване str_replace()

// присвоява
$bodytag = str_replace("%body%" , "черно" , " " );

// присвояване: Hll Wrld f PHP
$vowels = array("a", "e", "i", "o", "u", "A", "E", "I", "O", "U");
$onlyconsonants = str_replace ($vowels, "", "Hello World of PHP");

// присвоява: Трябва да ядете пица, бира и сладолед всеки ден
$фраза = „Трябва да ядете плодове, зеленчуци и фибри всеки ден.“;
$healthy = array("плодове" , "зеленчуци" , "фибри" );
$yummy = array("пица" , "бира" , "сладолед" );

$newphrase = str_replace ($healthy, $yummy, $phrase);

// присвояване: 2
$str = str_replace ("ll" , "" , "браво госпожице Моли!" , $count );
ехо $брой;
?>

Пример #2 Примери за потенциални трикове с str_replace()

// Поръчка за замяна
$str = "Ред 1\nРед 2\rРед 3\r\nРед 4\n";
$order = array("\r\n" , "\n" , "\r" );
$replace = "
" ;

// Обработва първо \r\n, за да избегне повторното им заместване.
echo $newstr = str_replace ($order, $replace, $str);

// Извежда F, защото A се заменя с B, след това B с C и така нататък...
// В резултат E ще бъде заменено с F, тъй като замяната се извършва отляво надясно.
$търсене = масив("A" , "B" , "C" , "D" , "E" );
$replace = array("B" , "C" , "D" , "E" , "F" );
$subject = "A" ;
echo str_replace ($search, $replace, $subject);

// Резултати: ябълка, ядка, ядка (по причината по-горе)
$букви = масив("I", "o");
$fruit = array("apple" , "nut" );
$text = "Аз съм за" ;
$изход = str_replace ($букви, $плод, $текст);
ехо $ изход;
?>

Бележки

Коментирайте: Тази функция е безопасна за обработка на данни в двоична форма.

Внимание

Забележка относно поръчката за замяна

защото str_replace()замества отляво надясно, след което, когато използва множество замествания, може да замени предварително вмъкната стойност с друга. Вижте също примери на тази страница.

Коментирайте:

Тази функция е чувствителна към главни и малки букви. Използвайте str_place()за замяна без разлика на малки и главни букви.

Коментирайте: В PHP 7.0.0 на 64-битови платформи няма постижимо ограничение за дължина на низове, на 32-битови системи и по-ранни версии на PHP низовете не могат да бъдат по-големи от 2 GB (2147483647 байта).

Синтаксис

Един низ може да бъде дефиниран с четири различни начини:

  • единични кавички
  • двойни кавички
  • синтаксис на nowdoc (от PHP 5.3.0)

Единични кавички

Най-простият начинда дефинирате низ означава да го оградите в единични кавички (символ " ).

За да използвате единична кавичка в низ, екранирайте я с обратна наклонена черта ( \ ). Ако трябва да напишете самата обратна наклонена черта, дублирайте я ( \\ ). Всички други обратни наклонени черти ще бъдат интерпретирани като обикновени знаци, което означава, че ако се опитате да използвате други последователности за избягване, като напр. \rили , те ще бъдат изведени такива, каквито са, вместо някакво специално поведение.

ехо "това е прост низ";

ехо „Също така можете да вмъкнете в редове
знак за нов ред като този,
това е нормално"
;

// Резултати: Един ден Арнолд каза: „Ще се върна“
ехо „Един ден Арнолд каза: „Ще се върна““;

ехо „Изтрихте ли C:\\*.*?“;

// Изходи: Изтрихте ли C:\*.*?
echo "Изтрихте ли C:\*.*?" ;

// Изход: Това няма да бъде разширено: \n нов ред
ехо "Това няма да се разшири: \n нов ред";

// Отпечатва: $expand променливите също не се разширяват от $either
ехо "Променливите $expand също $either не се разширяват";
?>

Двойни кавички

Ако низът е ограден в двойни кавички ("), PHP разпознава следните последователности за избягване на специални знаци:

Ескейп последователности
Последователност Значение
нов ред (LF или 0x0A (10) в ASCII)
\r връщане на каретка (CR или 0x0D (13) в ASCII)
\T хоризонтален раздел (HT или 0x09 (9) в ASCII)
\v вертикален раздел (VT или 0x0B (11) в ASCII) (от PHP 5.2.5)
\e екраниращ знак (ESC или 0x1B(27) в ASCII) (от PHP 5.4.4)
\f канал на страница (FF или 0x0C (12) в ASCII) (от PHP 5.2.5)
\\ наклонена черта
\$ знак за долар
\" двойни кавички
\{1,3} последователност от знаци, съответстваща на регулярен израз на знак в осмична форма, която безшумно препълва, за да се побере в байт (т.е. "\400" === "\000")
\x(1,2) поредица от знаци, която съответства на символен регулярен израз в шестнадесетичен формат
\u(+) последователност от знаци, съответстваща на регулярен израз на Unicode знак, който се преобразува в низ в UTF-8 представяне (добавен в PHP 7.0.0)

Както при низ, затворен в единични кавички, екранирането на който и да е знак също ще отпечата самия символ за екраниране. Преди PHP 5.1.1 обратната наклонена черта в \($var)не е отпечатано.

Heredoc

Третият начин за дефиниране на низове е използването на синтаксиса heredoc: <<< . След този оператор трябва да посочите идентификатор, след това нов ред. След това идва самият ред и след това същият идентификатор, който затваря вмъкването.

Линия трябва дазапочнете със затварящ идентификатор, т.е. трябва да е в първата колона на реда. В допълнение, идентификаторът трябва да следва същите правила за именуване като всички други PHP тагове: да съдържа само буквено-цифрови знаци и долни черти и не трябва да започва с число (долните черти са разрешени).

внимание

Много е важно да се отбележи, че низът със затварящия идентификатор не трябва да съдържа други знаци, освен точка и запетая ( ; ). Това означава, че ID не трябва да има отстъпи че не може да има интервали или раздели преди или след точка и запетая. Също така е важно да разберете, че първият знак преди затварящия идентификатор трябва да бъде знак за нов ред, както е дефинирано от вашата операционна система. Например, на UNIX системи, включително macOS, това е . Затварящият идентификатор също трябва да бъде непосредствено последван от нов ред.

Ако това правило е нарушено и затварящият идентификатор не е "чист", се счита, че няма затварящ идентификатор и PHP ще продължи да го търси. Ако в този случай правилният затварящ идентификатор никога не бъде намерен, това ще доведе до грешка при анализиране с номер на ред в края на скрипта.

Beispiel #1 Пример за неправилен синтаксис

клас foo(
публичен $bar =<<бар
EOT;
// не е позволено подпълване преди затварящия идентификатор
}
?>

Beispiel #2 Пример за правилен синтаксис

клас foo(
публичен $bar =<<бар
EOT;
}
?>

Heredoc не може да се използва за инициализиране на полета на клас. Считано от PHP 5.3, това ограничение се прилага само за heredocs, които съдържат променливи в себе си.

Текстът на Heredoc се държи по същия начин като низ в двойни кавички, без да ги има. Това означава, че не е необходимо да избягвате кавички в heredoc, но все пак можете да използвате горните екраниращи последователности. Променливите се обработват, но трябва да сте толкова внимателни, когато използвате сложни променливи в heredoc, както когато работите с низове.

Beispiel #3 heredoc пример за дефиниране на низ

$str =<<Пример за линия,
обхващащ няколко реда
използвайки синтаксиса на heredoc.
EOD;

Клас foo
{
var $foo;
var $bar;

Функция __construct()
{
$this -> foo = "foo" ;
$това ->
}
}

$foo = newfoo();
$name = "Име" ;

ехо<<Казвам се "$name". Пиша $foo -> foo .
Сега вадя
($foo -> бар [1]) .
Това трябва да изведе главна буква "A": \x41
EOT;
?>

Казвам се "Име". Пиша Фу. Сега извеждам Bar2. Това трябва да изведе главна буква "A": A

Също така е възможно да се използва синтаксис на heredoc за предаване на данни през аргументи на функцията:

От версия 5.3.0 стана възможно да се инициализират статични променливи и свойства/константи на класове с помощта на синтаксиса на heredoc:

Beispiel #5 Използване на heredoc за инициализиране на статични променливи

// Статични променливи
functionfoo()
{
статичен $бар =<<Тук няма нищо...
етикет;
}

// Константи/свойства на класа
клас foo
{
const BAR =<<Пример за използване на константа
FOOBAR;

Публична $base =<<Пример за използване на полето
FOOBAR;
}
?>

От PHP 5.3.0 също е възможно идентификаторът на Heredoc да се огради с двойни кавички:

Nowdoc

Nowdoc е същото за низове в единични кавички, както heredoc е за низове в двойни кавички. Nowdoc е подобен на heredoc, но вътре в него не се правят замени. Тази конструкция е идеална за вграждане на PHP код или други големи текстови блокове, без да се налага да го екранирате. В това той е малко подобен на конструкцията SGML. чрез деклариране на блок от текст, който не е предназначен за обработка.

Nowdoc се обозначава със същата последователност <<< , който се използва в heredoc, но идентификаторът, който го следва, е ограден в единични кавички, например, <<<"EOT" . Всички условия, които се прилагат за идентификаторите на heredoc, се отнасят и за nowdoc, особено тези, които се прилагат за затварящия идентификатор.

Beispiel #7 nowdoc пример

ехо<<<"EOD"
текстов пример,
обхващащ няколко реда
използвайки синтаксиса на nowdoc. Обратно наклонените черти винаги се третират буквално,
например \\ и \".
EOD;

Резултатът от изпълнението на този пример:

Пример за текст, обхващащ няколко реда, използващ синтаксиса nowdoc. Обратните наклонени черти винаги се третират буквално, като \\ и \".

Пример #8 Пример за цитиране на низ в Nowdoc с променливи

/* По-сложен пример с променливи. */
клас foo
{
публичен $foo;
публичен $bar;

Функция __construct()
{
$this -> foo = "foo" ;
$this -> bar = array("Bar1" , "Bar2" , "Bar3" );
}
}

$foo = newfoo();
$name = "Име" ;

ехо<<<"EOT"
Казвам се "$name". Пиша $foo->foo.
Сега пиша ($foo->bar).
Това не трябва да извежда главно "А": \x41
EOT;
?>

Резултатът от изпълнението на този пример:

Казвам се "$name". Пиша $foo->foo. Сега пиша ($foo->bar). Това не трябва да извежда главно "А": \x41

Пример #9 Пример за статични данни

клас foo(
публичен $bar =<<<"EOT"
бар
EOT;
}
?>

Коментирайте:

Поддръжката на nowdoc беше добавена в PHP 5.3.0.

Променливи за обработка

Ако даден низ е посочен в двойни кавички или с heredoc, променливите в него се обработват.

Има два вида синтаксис: прост и сложен. Простият синтаксис е по-лесен и удобен. Това прави възможно обработката на променлива, стойност на масив ( масив) или свойства на обект ( обект) с минимални усилия.

Сложният синтаксис може да бъде идентифициран от фигурните скоби около израза.

Прост синтаксис

Ако преводачът срещне знак за долар ( $ ), той улавя възможно най-много знаци, за да формира правилното име на променливата. Ако искате да укажете края на име, оградете името на променливата във фигурни скоби.

$juice = "ябълка";

echo "Той изпи малко $juice сок." . PHP_EOL ;

// Неправилно. "s" е валиден символ за име на променлива, но името на променливата е $juice.
echo "Той изпи малко сок, направен от $сокове." ;

// Правилно. Краят на името на променливата е строго указан с помощта на скоби:
echo "Той изпи малко сок, направен от $(сок) s." ;
?>

Резултатът от изпълнението на този пример:

Той изпи малко ябълков сок. Той изпи малко сок, направен от. Той изпи сок от ябълки.

Елемент от масив ( масив) или свойство на обект ( обект). В индексите на масива, затварящата квадратна скоба ( ] ) маркира края на дефиницията на индекса. За свойствата на обекта важат същите правила, както и за простите променливи.

Пример #10 Пример за прост синтаксис

define("KOOLAID" , "koolaid1" );
$juices = array("apple" , "orange" , "koolaid1" => "purple" );

echo "Той изпи малко $juices [ 0 ] сок." . PHP_EOL ;
echo "Той изпи малко $juices [ 1 ] сок." . PHP_EOL ;
echo "Той изпи малко $juices [ koolaid1 ] сок." . PHP_EOL ;

класни хора(
public $john = "Джон Смит";
public $jane = "Джейн Смит";
public $robert = "Робърт Полсън";

Public $smith = "Смит" ;
}

$ хора = нови хора ();

echo " $people -> john изпи малко $juices [ 0 ] сок." . PHP_EOL ;
echo " $people -> john тогава каза здравей на $people -> jane." . PHP_EOL ;
echo " $people -> john "съпругата поздрави $people -> robert." . PHP_EOL ;
echo " $people -> robert поздрави двамата $people -> smiths." ; // Няма да работи
?>

Резултатът от изпълнението на този пример:

Той изпи малко ябълков сок. Той изпи малко портокалов сок. Той изпи малко лилав сок. Джон Смит изпи малко ябълков сок. Тогава Джон Смит поздрави Джейн Смит. Съпругата на Джон Смит поздрави Робърт Полсен Робърт Полсен поздрави двамата.

PHP 7.1.0 добави поддръжка отрицателенцифрови индекси.

Пример #11 Отрицателни числови индекси

$string = "низ";
ехо „Знакът с индекс -2 е$низ [- 2]." , PHP_EOL;
$низ [- 3] = "o";
ехо „Промяната на знака в позиция -3 на „o“ води до следния ред:$низ." , PHP_EOL;
?>

Резултатът от изпълнението на този пример:

Символът с индекс -2 е n. Промяната на знака в позиция -3 на "o" създава следния низ: силен

За нещо по-сложно използвайте сложен синтаксис.

Сложен (къдрав) синтаксис

Нарича се сложен не защото е труден за разбиране, а защото позволява използването на сложни изрази.

Всяка скаларна променлива, елемент от масив или свойство на обект, което се преобразува в низ, може да бъде представено в низ с този синтаксис. Просто напишете израза точно както бихте направили извън низа и след това го оградете { и } . Тъй като { не може да бъде екраниран, този синтаксис ще бъде разпознат само когато $ следва непосредствено след { . Използвайте {\$ за печат {$ . Няколко илюстративни примера:

// Показване на всички грешки
съобщаване на грешка (E_ALL);

$great = "страхотно";

// Не работи, извежда: Това (страхотно)
echo "Това е ($велико)" ;

// Работи, извежда: Това е страхотно
echo "Това е ($страхотно)" ;

// Върши работа
ехо „Този ​​площад е широк($square -> width) 00 сантиметра." ;

// Работи, ключовете в кавички работят само със синтаксиса на фигурни скоби
echo "Това работи: ( $arr [ "ключ" ]) " ;

// Върши работа
echo "Това работи: ( $arr [ 4 ][ 3 ]) " ;

// Това е грешно поради същата причина, поради която $foo е извън
// линии. С други думи, пак ще работи
// но тъй като PHP първо търси константата foo, това ще извика
// Грешка на ниво E_NOTICE (недефинирана константа).
ехо "Не е правилно:( $arr [ foo ][ 3 ]) " ;

// Върши работа. При използване на многомерни масиви вътре
// низовете винаги използват фигурни скоби
echo "Това работи: ( $arr [ "foo" ][ 3 ]) " ;

// Върши работа.
echo "Това работи: ". $arr [ "foo" ][ 3 ];

ехо „Това също работи:($obj -> values ​​[3]-> име) ";

ехо „Това е стойността на променливата с име$name : ($( $name )) " ;

ехо „Това е стойността на променливата по име, която се връща от функцията getName():($( getName ())) ";

ехо „Това е стойността на променливата по име, върната от \$object->getName():($( $object -> getName ())) " ;

// Не работи, извежда: Ето какво връща getName(): (getName())
ехо „Ето какво връща getName(): (getName())“;
?>

Също така е възможно да се осъществи достъп до свойства на обекти в низове, като се използва този синтаксис.

клас foo(
var $bar = "Аз съм бар." ;
}

$foo = newfoo();
$bar = "бар";
$baz = array("foo" , "bar" , "baz" , "quux" );
ехо "( $foo -> $bar ) \n" ;
echo " ( $foo ->( $baz [ 1 ])) \n" ;
?>

Резултатът от изпълнението на този пример:

Аз съм бар. Аз съм бар.

Коментирайте:

Функциите, извикванията на методи, статичните променливи на класа и константите на класа работят вътрешно {$} , започвайки с PHP 5. Посочената стойност обаче ще се третира като име на променлива в същия контекст като низа, в който е дефинирана. Използване на единични фигурни скоби ( {} ) няма да работи за достъп до стойностите на функции, методи, константи на клас или статични променливи на клас.

// Показване на всички грешки
съобщаване на грешка (E_ALL);

класни бири(
const softdrink = "rootbeer" ;
public static $ale = "ipa";
}

$rootbeer = "A & W" ;
$ipa = "Александър Кийт" ;

// Това работи, извежда: Бих искал A & W
echo "Бих искал ($( бири :: безалкохолни напитки )) \n" ;

// Това също работи, извежда: Бих искал Alexander Keith".
echo "Бих искал ($( бира :: $ейл)) \n" ;
?>

Достъп до знак в низ и промяната му

Символите в низовете могат да се използват и модифицират чрез указване на отместването им от началото на низа, започвайки от нула, в квадратни скоби след низа, например $str. Мислете за низ за тази цел като за масив от знаци. Ако трябва да получите или замените повече от 1 символ, можете да използвате функциите substr()и substr_replace().

Коментирайте: от PHP 7.1.0 се поддържат отрицателни стойности на отместване. Те задават отместването от края на низа. Преди това отрицателните отмествания причиняваха грешка в нивото E_NOTICEкогато се чете (връща празен низ) или E_ПРЕДУПРЕЖДЕНИЕпри запис (оставяйки низа непроменен).

Коментирайте: Символ в низ може да бъде достъпен и с помощта на фигурни скоби, като $str(42) .

внимание

Опитът за запис на отместване извън низа ще допълни низа с интервали до това отместване. Типовете, които не са цели числа, ще бъдат преобразувани в цели числа. Грешен тип отместване ще причини грешка в нивото E_ПРЕДУПРЕЖДЕНИЕ. Използва се само първият знак от присвоения низ. От PHP 7.1.0 присвояването на празен низ ще доведе до фатална грешка. Преди това в този случай беше присвоен нулев байт (NULL).

внимание

Низовете в PHP са вътрешни масиви от байтове. В резултат на това достъпът или модифицирането на низ чрез отместване не е многобайтово безопасно и трябва да се извършва само с низове в еднобайтови кодировки като ISO-8859-1.

Коментирайте: От PHP 7.1.0 използването на празен индекс причинява фатална грешка, преди в такъв случай низът беше преобразуван в масив без предупреждение.

Пример #12 Няколко примерни низа

// Получаване на първия знак от низа
$str = "Това е тест." ;
$first = $str [0];

// Получаване на третия знак от низа
$трето = $str [ 2 ];

// Получаване на последния знак от низа
$str = "Това все още е тест." ;
$последен = $str [ strlen($str )- 1];

// Промяна на последния знак от низа
$str = "Поглед към морето" ;
$str [ strlen ($str )- 1 ] = "e" ;

?>

От PHP 5.4 отместването в низ трябва да бъде или цяло число, или низ, съдържащ числа, в противен случай ще бъде издадено предупреждение. Преди това отместване, дадено от низ като "фу", без предупреждение беше преобразувано в 0 .

Пример #13 Разлики между PHP 5.3 и PHP 5.4

$str = "abc" ;

Var_dump($str["1"]);
var_dump (isset($str [ "1" ]));

Var_dump($str[ "1.0" ]);
var_dump (isset($str [ "1.0" ]));

Var_dump($str["x"]);
var_dump (isset($str [ "x" ]));

Var_dump($str[ "1x" ]);
var_dump (isset($str [ "1x" ]));
?>

Резултатът от изпълнението на този пример в PHP 5.3 е:

string(1) "b" bool(true) string(1) "b" bool(true) string(1) "a" bool(true) string(1) "b" bool(true)

Резултатът от изпълнението на този пример в PHP 5.4 е:

string(1) "b" bool(true) Предупреждение: Незаконно отместване на низ "1.0" в /tmp/t.php на ред 7 string(1) "b" bool(false) Предупреждение: Незаконно отместване на низ "x" в / tmp/t.php на ред 9 string(1) "a" bool(false) string(1) "b" bool(false)

Коментирайте:

Опит за достъп до променливи от други типове (с изключение на масиви или обекти, които имплементират определени интерфейси) с или {} тихо се върнете НУЛА.

Коментирайте:

PHP 5.5 добави поддръжка за достъп до символи в низови литерали с помощта на синтаксиса или {} .

Има много полезни функции за модифициране на низове.

Основните функции са описани в раздела за низови функции, а за разширено търсене и замяна, Perl-съвместими функции за регулярен израз.

Преобразуване в низ

Стойността може да бъде преобразувана в низ чрез преобразуване (низ), или функции strval(). В изрази, където е необходим низ, преобразуването става автоматично. Това се случва, когато използвате функции ехоили печат, или когато стойността на променлива се сравнява с низ. Четенето на разделите за типове и манипулиране на типове в ръководството ще направи следното по-ясно. Вижте също settype().

Масивите винаги се преобразуват в низ "масив", така че не можете да покажете съдържанието на масива ( масив) използвайки ехоили печатза да видите какво съдържа. За да видите отделен елемент, използвайте нещо като ехо $arr["foo"]. Вижте по-долу за съвети как да показвате/преглеждате цялото съдържание.

За да конвертирате променлива тип "обект"за вид низизползва се магическият метод __toString.

Значение НУЛАвинаги се преобразува в празния низ.

Както можете да видите по-горе, директното низиране на масиви, обекти или ресурси не предоставя полезна информация за самите стойности, освен техните типове. По-подходящ начин за извеждане на стойности за отстраняване на грешки е използването на функции print_r()и var_dump().

Повечето стойности в PHP могат да бъдат преобразувани в низ за постоянно съхранение. Този метод се нарича сериализация и може да се направи с функцията сериализирам ().

Преобразуване на низове в числа

Ако низът е разпознат като числова стойност, получената стойност и тип се определят, както следва.

Ако низът не съдържа нито един от знаците ".", "e" или "E" и стойността на числото се вписва в диапазона от цели числа (дефиниран PHP_INT_MAX), низът ще бъде разпознат като цяло число ( цяло число). Във всички останали случаи се счита за число с плаваща запетая ( плавам).

Стойността се определя от началната част на низа. Ако низът започва с валидна числова стойност, тази стойност ще бъде използвана. В противен случай стойността ще бъде 0 (нула). Валидната цифрова стойност е една или повече цифри (които могат да съдържат десетична запетая), незадължително предшествани от знак, последвани от незадължителна експонента. Показателят е "e" или "E", последвано от една или повече цифри.

$foo = 1 + "10.5" ; // $foo е float (11.5)
$foo = 1 + "-1.3e3" ; // $foo е float (-1299)
$foo = 1 + "bob-1.3e3" ; // $foo е цяло число (1)
$foo = 1 + "bob3" ; // $foo е цяло число (1)
$foo = 1 + "10 малки прасета" ; // $foo е цяло число (11)
$foo = 4 + "10.2 малки прасенца" ; // $foo е float (14.2)
$foo = "10.0 прасета" + 1; // $foo е float (11)
$foo = "10,0 прасета" + 1,0; // $foo е float (11)
?>

Вижте раздела strtod(3) на документацията на Unix за повече информация относно това преобразуване.

Ако искате да тествате някой от примерите в този раздел, копирайте и поставете него и следния ред, за да видите какво ще се случи:

echo "\$foo== $foo ; тип: " . gettype ($foo). "
\н" ;
?>

Не очаквайте да получите кода на символа, като го преобразувате в цяло число (както се прави например в C). За да конвертирате символи в техните ASCII кодове и обратно, използвайте функциите ord()и chr().

Подробности за внедряването на тип низ

преди 7 години

В документацията не се споменава, но затварящата точка и запетая в края на heredoc всъщност се интерпретира като истинска точка и запетая и като такава понякога води до синтактични грешки.

$foo =<<abcd
КРАЙ;
?>

Това не:

Фу(<<abcd
КРАЙ;
);
// синтактична грешка, неочаквано ";"
?>

Без точка и запетая работи добре:

Фу(<<abcd
КРАЙ
);
?>

преди 3 години

Можете да използвате низ като масив от char (като C)

$a = "Тест за масив от низове";

var_dump($a);
// Върнете низ (17) "Тест за масив от низове"

var_dump($a);
// Върнете низ (1) "S"

// -- С преобразуване на масив --
var_dump((масив)$a);
// Върнете array(1) ( => string(17) "Тест за масив от низове")

var_dump((масив)$a);
// Върнете низ (17) "S"

Норихиори

преди 15 години

Можете да използвате сложния синтаксис, за да поставите стойността както на свойствата на обекта, така и на методите на обекта в низ. Например...
клас тест (
публичен $one = 1;
публична функция две()(
връщане 2;
}
}
$test = нов тест();
echo "foo ( $test -> one ) bar ( $test -> two ()) " ;
?>
Ще изведе "foo 1 bar 2".

Не можете обаче да направите това за всички стойности във вашето пространство от имена. Константите на класа и статичните свойства/методи няма да работят, защото сложният синтаксис търси "$".
клас тест (
const ЕДНО = 1;
}
echo "foo (Test::ONE) лента";
?>
Това ще изведе "foo (Test::one) bar". Константите и статичните свойства изискват да разделите низа.

преди 3 години

Внимавайте, че е в съответствие с „Преобразуване на низове в числа“:

If ("123abc" == 123 ) ехо "(intstr == int) неправилно тества като вярно.";

// Тъй като едната страна е число, низът се преобразува неправилно от intstr в int, което след това съвпада с тестовото число.

// Вярно за всички условни изрази като изрази if и switch (вероятно също цикли while)!

// Това може да бъде огромен риск за сигурността при тестване/използване/записване на въведени от потребителя данни, докато се очаква и тества само цяло число.

// Изглежда, че единствената корекция е 123 да бъде низ като "123", така че да не се извършва преобразуване.

?>

преди 6 години

Водещите нули в низове (най-малко изненада) не се третират като осмични.
Обмисли:
$x = "0123" + 0;
$y = 0123 + 0;
echo "x е $x, y е $y"; //отпечатва "x е 123, y е 83"
с други думи:
* водещите нули в цифровите литерали в изходния код се интерпретират като "осмични", вж. strtol().
* водещи нули в низове (напр. подадени от потребителя данни), когато се преобразуват (имплицитно или изрично) в цяло число, се игнорират и се считат за десетични, c.f. strtod().

преди 10 години

Ето един лесен хак, за да позволите на низове в двойни кавички и heredocs да съдържат произволни изрази в синтаксиса на фигурни скоби, включително константи и други извиквания на функции:

// Декларация за хакване
function_expr ($v) (върни $v;)
$_expr = "_expr" ;

// Нашата детска площадка
define("qwe" , "asd");
дефинирам("zxc", 5 );

$a= 3 ;
$b= 4 ;

функция ° С($a, $b) (връщане$a+ $b; }

// Използване
ехо"пред{ $_expr(1 + 2 )} публикация\n"; // извежда "pre 3 post"
ехо"пред{ $_expr(qwe)} публикация\n"; // извежда "pre asd post"
ехо"пред{ $_expr(° С($a, $b)+ zxc* 2 )} публикация\n"; // извежда "преди 17 пост"

// Общият синтаксис е ($_expr(...))
?>

Преди 2 години

Реших, че би било полезно да добавя този коментар, така че информацията да се показва поне на правилната страница на сайта на PHP.

Имайте предвид, че ако възнамерявате да използвате низ в двойни кавички с асоциативен ключ, може да попаднете на грешката T_ENCAPSED_AND_WHITESPACE. Някои смятат това за едно от по-малко очевидните съобщения за грешка.

Израз като:

$плод=масив(
"а"=> "ябълка",
"б"=> банан,
// и т.н
);

печат "Това е$плод[ "а"]"; // T_ENCAPSED_AND_WHITESPACE
?>

определено ще се разпадне на парчета.

Можете да го разрешите по следния начин:

печат"Това е$плод[ а] " ; // премахване на кавички от ключа
печат"Това е${ плодове[ "а"]} " ; // Сложен синтаксис
печат"Това е{ $плод[ "а"]} " ; // Вариант на сложния синтаксис
?>

Имам лични предпочитания към последния вариант, тъй като е по-естествен и по-близък до това, което би бил изразът извън низа.

Не е ясно (поне за мен) защо PHP тълкува погрешно единичните кавички вътре в израза, но предполагам, че това има нещо общо с факта, че кавичките не са част от низа със стойности - след като низът вече е анализиран, кавичките просто пречи...?

Преди 2 години

И двете трябва да работят :(

кластестване{
публична статика
$вар= "статичен";
public const VAR =
"конст";

обществена функция sayHelloStatic() {
ехо
Здравейте:{ $това:: $вар} " ;
}

обществена функция sayHelloConst() {
ехо
Здравейте:{ $това::VAR)" ; //Грешка при анализиране: синтактична грешка, неочаквано ")", очаква се "["
}
}

$obj= новтестване();
$obj-> sayHelloStatic();
$obj-> sayHelloConst();

преди 3 години

Нещо, което преживях и което без съмнение ще помогне на някого. . .
В моя редактор това ще подчертае синтаксиса HTML и $comment:

$html =<<<"EOD"
$коментар
EOD;

Използването на това показва всички същите цветове:

$html =<<$коментар
EOD;

което го прави много по-лесен за работа

преди 11 години

За да запазите ума си, не четете предишни коментари за дати ;)

Когато и двата низа могат да бъдат преобразувани в числа (в ("$a" > "$b") тест), тогава се използват получените числа, в противен случай ПЪЛНИТЕ низове се сравняват символ по знак:

var_dump("1.22" > "01.23" ); // bool(false)
var_dump("1.22.00" > "01.23.00" ); // bool(вярно)
var_dump("1-22-00" > "01-23-00" ); // bool(вярно)
var_dump((плаващ)"1.22.00" > (плаващ)"01.23.00" ); // bool(false)
?>



Маси:

C_id | компания | местоположение
1 | ООО Търсене | Кудикино поле 15/3
2 | ЗАО Елита | Слунисвалинск 133/7
3 | OJSC Pyshpyshch | Солдатодачестройское 404

Тип ремонт (repair_types)
r_id | ремонт_типове |
1 | Чук + пирони
2 | Насоки за красота
3 | Основен ремонт

Списък на поръчките (списък)
l_id | Кой | Какво трябва | време | коментар на оператора
1 | 1 | 2 | %timestamp% | %operator_text%
2 | 2 | 1 | | %текст%
3 | 3 | 2 | | %текст%

Таблица #1 съдържа списък с клиенти.
Таблица #2 съдържа списък с услуги.
Таблица № 3 съдържа списък с текущи поръчки за оперативни екипи. Тази таблица се актуализира редовно и за попълването й се използва уеб формуляр. Тъй като постъпват доста поръчки, записите се въвеждат в таблицата под формата на клиентски идентификатор и услуга.

Всъщност проблемът е, че третата таблица трябва да се показва в уеб формуляра "избор на поръчка" и вместо ID трябва да замените съответните полета от други колони.

Кодът:
$query = "ИЗБЕРЕТЕ * ОТ списък";
$резултат = mysql_query($заявка);
while($row=mysql_fetch_array($result. // вземете резултати от всеки ред
( echo "";// показване на данни
}




CREATE TABLE "table_name" ("id" int(255) NOT NULL AUTO_INCREMENT, "list" text (80) NOT NULL, PRIMARY KEY("id".

INSERT INTO "table_name" ("list") VALUES ("bla-bla")



най-добрият отговор $заявка =
"
изберете компании. Фирма, тип_ремонт.Типове_ремонт, списък.коментар_l
от списъка
вътрешни компании за присъединяване
в списъка.Кой = компании.c_id
типове_поправки на вътрешни съединения
в списъка."Какво трябва" = repair_types.r_id
";

Разбира се, изображенията, звуковите файлове, видео информацията, анимационните данни и аплетите съставляват важна част от съдържанието на World Wide Web, но по-голямата част от данните в мрежата все още са под формата на текст - последователности от знаци като това изречение. Основният PHP тип данни за представяне на текст е низ.

Описание на низове в PHP

Низовете са поредици от знаци, които могат да се третират като един обект - присвоени на променливи, предадени като вход към функции, върнати от функции или изпратени като изход, за да се покаже на уеб страницата на потребителя. Най-лесният начин за указване на низ в PHP код е да поставите поредица от знаци в кавички, единични ("") или двойни ("), например, както следва:

$myString = "Прост низ"; $anotherString = "Друг низ";

Разликата между единичните кавички и двойните кавички се дължи на това колко широко PHP средата интерпретира символите в кавички, преди да създаде действителния низ. Ако низът е затворен в единични кавички, тогава не се извършва почти никаква интерпретация и ако низът е затворен в двойни кавички, тогава PHP средата извършва заместването на стойностите на всички променливи, които са посочени в низа, а също и замества някои специални последователности от знаци, които започват с обратно наклонена черта ().

Например след обработка на следния код, който е част от уеб страница:

$count = 13; $string1 = "Низът \"Здравей, свят!\" съдържа $count символа.
"; $string2 = "Низът \"Здравей, свят!\" съдържа $count символа.
"; echo $string1; echo $string2;

можете да очаквате да получите следния изход в прозореца на браузъра:

Замяна на стойност с помощта на фигурни скоби

В повечето ситуации можете просто да затворите променливата в низ с двойни кавички и стойността на променливата ще бъде заменена в низа, когато интерпретаторът обработва низа. Но в двете ситуации, описани по-долу, може да се окаже, че интерпретаторът на низове не е в състояние да вземе информирано решение и се нуждае от допълнителни насоки от разработчика.

Първата ситуация е, че интерпретаторът не може да определи къде завършва името на променливата, а втората ситуация възниква, когато е необходимо да се замени стойността на израза в низа, а не стойността на проста променлива. В тези случаи разработчикът може да изясни, като огради името или израза, които ще бъдат обработени, във фигурни скоби (()).

Например PHP интерпретаторът няма проблем с обработката на следния код:

$sport = "волейбол"; $play = "Обичам да играя $sport.";

В такива случаи интерпретаторът среща знака $, след което започва да подрежда символите, за да разкрие името на променливата, и прави това, докато не срещне интервал или точка, които следват името на променливата $sport. Интервалите и точките не могат да бъдат част от име на променлива, така че става ясно, че въпросната променлива се казва $sport; след това интерпретаторът на PHP успешно намира стойност за дадената променлива ("volleyball") и я замества.

Но понякога не е възможно да маркирате края на име на променлива с интервал или точка. Разгледайте следния пример:

$sport1 = "ще"; $sport2 = "крак"; $sport3 = "кошница"; // Неправилни конструкции $play1 = "Обичам да играя $sport1ball."; $play2 = "Обичам да играя $sport2ball."; $play3 = "Обичам да играя $sport3ball.";

В този случай желаният ефект няма да бъде постигнат, тъй като PHP интерпретаторът ще разглежда низа $sport1 като част от името на променливата $sport1ball, на която очевидно не е присвоена никаква стойност. Вместо това трябва да използвате следната нотация:

// Валидна конструкция $play1 = "Обичам да играя ($sport1)топка."; $play2 = "Обичам да играя ($sport2)топка."; $play3 = "Обичам да играя ($sport3)топка.";

Тази нотация казва на PHP интерпретатора, че само стойността на израза с името на променливата, оградено във фигурни скоби, трябва да бъде оценена преди заместването на стойността.

По подобни причини интерпретаторът на PHP, ако не се използват фигурни скоби, има затруднения при заместването на стойностите на сложни изрази с имена на променливи, като например достъп до елементи от многомерни масиви и обектни променливи. Общото правило е, че ако отваряща фигурна скоба (() е непосредствено последвана от $, тогава PHP интерпретаторът оценява стойността на израза с името на променливата до затварящата фигурна скоба ()) и след това замества получената стойност в низа. (Ако искате буквална стойност ($) да се появи в низа, това може да стане, като поставите пред всеки от тези знаци обратна наклонена черта, \).

Символи и символни индекси в низове

За разлика от някои други езици за програмиране, PHP няма отделен тип знаци, който да не е същият като типа низ. Най-общо казано, функциите, които изискват действителни символни параметри на други езици, са проектирани да приемат низове с дължина 1 в PHP.

Избирането на отделни знаци от низ може да стане чрез указване на пореден номер на знак, базиран на нула, който трябва да бъде указан във фигурни скоби непосредствено след името на променливата на низа. Такива символи всъщност са низове от един знак. Например стартиране на следния код:

$myString = "Удвоен"; за ($index = 0; $index< strlen($myString); $index++) { $char = $myString{$index}; print("$char$char"); }

води до следния изход в прозореца на браузъра:

Очевидно всеки знак от низа се отпечатва два пъти при всяко преминаване през цикъла. Функцията strlen() връща дължината на низ.

Операции с низове

PHP предоставя две операции с низове: оператор за точка (.), или оператор за конкатенация, и оператор за точка и знак за равенство (.=), или оператор за конкатенация и присвояване. Разгледайте следния пример:

$string1 = "Това е част"; $string2 = "низове"; // Конкатенация на низ ехо $string1." просто ".$string2."
"; // "Това е част от прост низ" // Свързване и присвояване на $string1 .= "просто"; // Еквивалентно на $string1 = $string1." прост "; $string1 .= $string2; echo $string1; // "Това е част от прост низ"

Трябва да се отбележи, че в примера по-горе първият оператор за ехо не се предава на множество действителни параметри на низ; предава се само един действителен параметър на низ, резултат от конкатенацията на четири низа. Първият и третият ред се задават с помощта на променливи, а вторият и четвъртият ред са буквален низ, ограден в двойни кавички.

Синтаксична структура на поддокумент (Heredoc)

В допълнение към синтактичните структури на низове в единични и двойни кавички, PHP предоставя друг начин за указване на низ, наречен синтактичната структура на вложения документ (Heredoc). Както се оказа, такава синтактична структура е много удобно средство за определяне на големи фрагменти от текст, заместени с помощта на променливи, тъй като елиминира необходимостта потребителят да обозначава вътрешни кавички, използвайки специални знаци. Този метод е особено полезен при създаване на страници, които съдържат HTML формуляри.

Знакът на оператора, използван в синтактичната структура на поддокумента, е (<<<). За этим знаком должна непосредственно следовать метка (не заключенная в кавычки), которая обозначает начало многострочного текста. Интерпретатор PHP продолжает включать в состав значения переменной следующие строки до тех пор, пока снова не появится эта же метка в начале строки. За заключительной меткой может следовать необязательная точка с запятой, а какие-либо другие символы после метки не допускаются.

Разгледайте следния пример:

$низ =<<

EOT; ехо $низ;

Обърнете внимание, че последната дума EOT, показана по-горе, изобщо не трябва да има отстъп, в противен случай ще бъде третирана като принадлежаща към допълнително включения текст. Не е необходимо да използвате думата "EOT" като етикет, етикетът може да има произволно име, следвайки обичайните конвенции за именуване на променливи в PHP.

Заместването на променливи се извършва по абсолютно същия метод, както когато се използват низове, затворени в двойни кавички. Удобна характеристика на вложен документ е, че в така обозначения текст могат да се въвеждат кавички без използване на контролни знаци и това не води до преждевременно завършване на формирането на реда. Примерът, показан по-горе, извежда прост HTML формуляр:

Функции за низове

Езикът PHP предоставя голямо разнообразие от функции за обработка и конвертиране на низове. Ако някога ви се наложи да създадете своя собствена функция, която чете и обработва низове символ по символ, за да формира нов низ, първо помислете дали някой друг може да се е сблъсквал с подобна задача преди. И ако интуицията предполага, че такава възможност съществува, тогава може би има вградена функция, която решава проблема. За повече информация относно функциите за низове, моля, вижте https://php.net/manual/en/ref.strings.php.

Този раздел представя основните функции за проверка, сравняване, модифициране и отпечатване на низове. За да овладеете наистина възможностите на PHP за манипулиране на низове, изглежда, че трябва да сте запознати поне бегло с всичко, обхванато в този раздел. Описание на функциите, предназначени за работа с регулярни изрази, можете да намерите в следващата статия.

Валидиране на низове

Кои са най-честите въпроси относно низовете, на които трябва да се отговори? Първият в списъка с въпроси е въпросът колко е дълъг низът; за отговор се използва функцията strlen(), чието име е съкращение от string length - дължината на низа. Пример за използване на такава функция е показан по-долу:

$enStr = "Здравей свят!"; $rusStr = "Прост низ"; echo $enStr." - ".strlen($enStr)." знаци
"; echo $rusStr." - ".strlen($rusStr)." герои";

Изпълнението на този код води до следния двусмислен резултат:

Както можете да видите, за низа "Hello world!" резултатът е правилен, но за низа "Прост низ" резултатът от 27 символа е неправилен. Какво има тук? Факт е, че функцията strlen() брои байтове, а не знаци. В първия случай всички символи в низа са на английски, т.е. са представени чрез ASCII кодиране и са кодирани като 1 байт. Във втория случай низът съдържа руски символи, които са кодирани в 2 байта (UTF-8). За да се избегнат проблеми по-късно при работа с низови функции, PHP трябва да използва функции за многобайтови кодировки, които започват с префикса mb_. Това означава, че в предишния пример трябва да замените функцията strlen() с mb_strlen() и изрично да посочите кодирането:

Echo $rus_str." - ".mb_strlen($rus_str, "UTF8")." знаци";

Намиране на знаци и поднизове

Следващият въпрос относно низовете е какво съдържат. Например функцията strpos() ви позволява да намерите номера на позицията на определен знак в низ, ако има такъв:

$enStr = "Здравей свят!"; echo "Символ "l": ".strpos($enStr, "l"); // 2

Ситуациите, включващи използването на функцията strpos(), са случаи, в които нечувствителността на типа на PHP може да бъде проблем. Ако съвпадение не бъде намерено, тогава функцията връща false и ако знакът за търсене съвпада с първия знак в низа, тогава функцията връща 0 (тъй като позициите на знаците в низа започват от 0, а не от 1). И двете стойности отговарят на false, когато се използват за тестване на булево условие. Един от начините за разграничаване на тези стойности е да се използва операторът за сравнение на самоличността (операторът ===, въведен след PHP4), който връща true само ако неговите операнди са еднакви и са от същия тип. Операторът за сравнение на самоличността може да се използва, за да се тества дали върнатата стойност е 0 (или невярна) без риск от объркване на върнатата стойност с други стойности, които може да станат същите след преобразуването.

Функцията strpos() може също да се използва за търсене на подниз, а не на единичен знак. За да направите това, достатъчно е да зададете многознаков низ, а не едносимволен низ, като желания. Освен това при извикването на тази функция можете да зададете допълнителен целочислен параметър, който указва позицията на началото на търсенето.

Възможно е и търсене в обратна посока, от края на низа към началото. За това се използва функцията strrpos(). (Имайте предвид, че тази функция има допълнителен r в името си, което е съкращение от reverse.) Тази функция приема като параметри низа за търсене и низа от един символ за търсене и след това връща последните позиции на втория параметър в първия параметър. (За разлика от функцията strpos(), във функцията strrpos() търсеният низ трябва да се състои само от един знак.) След прилагане на тази функция със същите параметри, както в предишния пример, ще бъде намерена друга позиция:

$enStr = "Здравей свят!"; echo "Символ "l": ".strrpos($enStr, "l"); // 9 защото търсенето е от края на низа

Сравнение

Тази линия съвпада ли с тази линия? Очевидно кодът често трябва да отговаря и на този въпрос, особено когато става въпрос за обработка на въвеждане от крайния потребител.

Най-простият метод за намиране на отговор на въпроса дали низовете са еднакви е да се използва прост оператор за сравнение на равенства (==), който проверява за равенство не само на низовете, но и на числата. Когато използвате оператора ==, два низа се считат за еднакви, ако съдържат абсолютно еднакви последователности от знаци. Това не проверява за по-строга дефиниция на идентични низове, като условието, че тези низове се съхраняват на един и същ адрес в паметта, но е чувствително към малки и главни букви (с други думи, дали сравняваните букви са главни или малки).

Резултатите от сравняването на два низа с помощта на оператора == (или съответните оператори< и >) може да се вярва само ако и двата операнда са низове и е известно, че не е настъпило преобразуване на типа. И винаги може да се вярва на резултатите от проверката с помощта на функцията strcmp(), която е описана по-долу.

Най-важната функция за сравнение на низове, която върши по-голямата част от работата, е strcmp(). Тази функция приема два низа като параметри и сравнява байт по байт, докато открие разлика. След това функцията връща отрицателно число, ако първият низ е по-малък от втория, и положително число, ако вторият низ е по-малък от първия. Ако низовете са идентични, функцията strcmp() връща нула.

Функцията strcasecmp() работи по същия начин, с изключение на това, че сравнението за равенство не е чувствително към главни и малки букви. Например извикването на strcasecmp("хей!", "ХЕЙ!") трябва да върне нула.

Търсене

Току-що описаните функции за сравнение ви позволяват да знаете дали един низ е равен на друг низ. И за да определите дали един низ се съдържа в друг, използвайте функцията strpos(), описана по-горе, или функцията strstr() и подобни функции.

Функцията strstr() приема като параметри низа за търсене и низа за търсене (в този ред). Ако е успешна, тази функция връща частта от низа, която започва с първото срещане на низа за търсене (и включва низа за търсене). Ако не бъде намерен такъв низ, функцията връща false. Следният кодов фрагмент предоставя примери за това как да използвате тази функция:

$str = "Здравей свят!"; $findStr = "свят"; echo "Подниз" $findStr" в оригиналния низ: ".strstr($str, $findStr);

Подобно на функцията strcmp(), функцията strstr() има нечувствителна към регистъра версия, наречена stristr() (i в това име е съкращение от нечувствителен). Функцията stristr() е идентична на функцията strstr() във всички отношения, с изключение на това, че сравнението третира малките букви като техните главни букви.

Избор на подниз

Много низови функции на PHP изпълняват операции за изрязване и поставяне на низове. Изрязването е селекция на част от низ, а вмъкването е селективна модификация на низ. Имайте предвид, че дори функциите за вмъкване (най-често) не променят низа, даден като входен параметър. Обикновено такива функции връщат модифицирано копие и оставят оригиналния параметър непроменен.

Най-простият начин за извадка на част от низ е да използвате функцията substr(), която връща нов низ, съдържащ част от подпоследователност от символи от стария низ. Функцията substr() приема като параметри низ (от който поднизът трябва да бъде взет извадка), цяло число (позицията, в която започва желаният подниз) и опционален трети параметър за цяло число, който указва дължината на желания подниз. Ако третият параметър не е указан, тогава се приема, че поднизът продължава до края на низа. (Трябва да се помни, че когато се използва тази функция, номерирането на позициите в ред започва от нула, а не от единица, както във всички параметри на PHP функция, които обозначават цифрови позиции в низове.) Например:

$str = "Здравей свят!"; ехо mb_substr($str, 7, 3, "UTF8"); // "свят"

Както параметърът за начална позиция, така и параметърът за дължина могат да бъдат отрицателни, но и в двата случая отрицателната стойност има различно значение. Ако началната позиция е отрицателна, тогава позицията на началния знак на подниза се определя чрез броене назад от края на низа, вместо да брои напред от началото на низа. (Начална позиция -1 показва, че броенето започва от последния знак, стойност -2 показва предпоследния знак и т.н.)

Въз основа на това може да се предположи, че стойността на отрицателна дължина също предполага, че поднизът трябва да се определи чрез броене назад от началния знак, вместо да брои напред, но това не е така. Твърдението, че знакът в началната позиция е първият знак във върнатия низ (а не последният), винаги е вярно. Вместо това отрицателен параметър за дължина означава, че крайният знак се определя чрез броене назад от края, вместо да броите напред от началната позиция.

По-долу са дадени няколко примера с положителни и отрицателни параметри:

$str = "Здравей свят!"; echo mb_substr($str, 7, 3, "UTF8")."
"; // "свят" ехо mb_substr($str, -4, 3, "UTF8")."
"; // "свят" ехо mb_substr($str, 0, -5, "UTF8")."
"; // "Здравей"

Премахване на интервали и табулатори от низове

Технически функциите chop(), ltrim() и trim() са функции за работа с поднизове (които много приличат на други функции), но всъщност тези функции са предназначени да премахват нежелани знаци от низове. Функциите chop(), ltrim() и trim() съответно премахват завършващи, водещи, водещи и завършващи празни знаци от низ, даден като единствен параметър на низ.

В допълнение към интервалите, тези функции премахват други знаци за интервали, като тези, посочени от екраниращите последователности \n, \r, \t и \0 (знаци за край на реда, табулатори и нулеви знаци, използвани за маркиране на края на ред в C програми).

В PHP е обичайно да се използва функцията за премахване на интервали в края на низ, наречена chop(), но може да се извика и идентична функция, по-описателно наречена rtrim(). И накрая, трябва да се отбележи, че функцията chop(), въпреки факта, че нейното име, което означава "отрязване", звучи много заплашително, не уврежда оригиналния параметър $original, който запазва предишната стойност.

Замяна на низ

Всички низови функции, обсъдени по-горе, осигуряват извличане на част от входния параметър, вместо да формират напълно нов низ. Този раздел обсъжда функциите str_replace() и substr_replace() за тази цел.

Функцията str_replace() ви позволява да замените всички срещания на даден конкретен подниз с друг низ. Тази функция приема три параметъра: низът, който да се търси, поднизът, който да бъде заменен, след като бъде намерен, и низът, който да се използва за замяната. Разгледайте следния пример:

$str = "Здравей свят!"; echo str_replace("свят", "планета", $str); // "Здравей планета!"

Замяната се извършва при всички срещания на подниза, открит в низа за търсене. Ако горният пример беше използван за замяна на името на град в остаряла енциклопедия, тогава след преобразуване на целия текст на енциклопедията в един PHP ред, такава замяна в целия текст може да се извърши с едно преминаване.

Както е показано по-горе, функцията str_replace() избира частта от изходния низ, която да бъде заменена, като търси срещания на желания подниз в изходния низ; за разлика от това, substr_replace() избира частта, която да бъде заменена от нейната абсолютна позиция. Тази функция приема до четири параметъра: низът за замяна, низът за замяна, началната позиция на замяната и (като незадължителен параметър) дължината на низа за замяна. Разгледайте следния пример:

echo substr_replace("ABCDEFG", "-", 2, 3); // "AB-FG"

CDE частта на низа е заменена с един знак. Имайте предвид, че в този случай е разрешено да се замени подниз с низ с различна дължина. Ако параметърът за дължина е пропуснат, тогава се приема, че цялата част от низа след началната позиция е заменена.

Функцията substr_replace() също приема отрицателни параметри като начална позиция и дължина, които се третират точно както във функцията substr() по-горе. Важно е да запомните, че в резултат на операции, извършени с помощта на функциите str_replace и substr_replace, оригиналният низ остава непроменен.

И накрая, има редица по-малко използвани функции, които формират нови низове от стари. Функцията strrev() просто връща нов низ с обърнати знаци във входния низ. Функцията str_repeat() приема един низ и един целочислен параметър и връща низ, съдържащ определения брой копия на параметъра на низа:

ехо str_repeat("ABC", 3); // ABCABCABC

Функции за преобразуване на регистър

Тези функции ви позволяват да конвертирате малки букви в главни и обратно. Функцията strtolower() връща низ с всички букви, преобразувани в малки букви. Няма значение дали оригиналният низ съдържа само главни букви или главни и малки букви. Например:

$str = "Здравей свят!"; ехо mb_strtolower($str, "UTF8"); // "Здравей свят!"

Ако вече сте изпитали необходимостта да правите много проверки на формуляри, може би сте забелязали, че функцията strtolower() е изключително удобен инструмент за обработка на имейл адреси, получени от потребители, които все още не знаят, че имейл адресите са малки и големи -нечувствителен. Не по-малко полезни са и други функции, свързани с тази категория.

Функцията strtoupper() връща низ с всички букви, преобразувани в главни букви. Пример е следният кодов фрагмент:

$str = "Здравей свят!"; ехо mb_strtoupper($str, "UTF8"); // "ЗДРАВЕЙ СВЯТ!"

Функцията ucfirst() прави главна само първата буква от низа, функцията ucwords() прави главна първата буква от всяка дума в низа. Нито функцията ucwords(), нито ucfirst() имат подобна функция за многобайтово кодиране, така че не са съвместими с низовете на кирилица.

Функции за въвеждане на контролни знаци

Едно от предимствата на езика PHP е, че може да се използва за обмен на данни с почти всяка система. Средства от този вид обикновено се разглеждат като вид "софтуерно лепило". В тази роля езикът PHP се използва за взаимодействие със сървъри на бази данни, LDAP сървъри, за обмен на данни чрез сокети и самата HTTP връзка. Често това взаимодействие се извършва, като първо се създаде низ на съобщение (като заявка към база данни) и след това се предава това съобщение на приемащата програма. Но програмите често придават специално значение на някои знаци и затова те трябва да бъдат преобразувани в контролни знаци. Това означава, че получаващата програма е инструктирана да третира такива знаци като буквална част от низа, вместо да прилага специално третиране към тях.

Много потребители, за да се справят с този проблем, разрешават използването на така наречения "режим на магически кавички", който гарантира, че кавичките се преобразуват в контролни знаци, преди низовете да бъдат вмъкнати в базите данни. Но ако такъв режим на обработка не е осъществим или желателен, тогава трябва да се използва доброто старо средство за вмъкване на знаци с обратна наклонена черта и след това премахване на тези знаци.

Функцията addslashes() преобразува единични и двойни кавички, обратни наклонени черти и нулеви знаци за екраниращи последователности с помощта на обратни наклонени черти, тъй като това са знаците, които обикновено трябва да бъдат преобразувани за екраниращи последователности, когато се подготвят заявки към бази данни:

$escapedstring = addslashes("Низ с "кавички"."); $query = "ВМЪКНЕТЕ В тестови (цитирани) стойности ("$escapedstring")"; $result = mysqli_query($link, $query) or die(mysql_error());

Изпълнението на този код предотвратява неправилното тълкуване на SQL оператора, сякаш низът завършва точно преди буквата "k". И след като извлечете тези данни, трябва да използвате функцията stripslashes(), за да премахнете обратните наклонени черти.

Функцията quotemeta() преобразува по-широк набор от символи в екраниращи последователности. Всички тези знаци обикновено имат специално значение в командния ред на Unix: " . ", " " ", " + ", " * ", " ? ", " [ ", " ] ", " ^ ", " (", " $ " и ")". Например изпълнение на следния код:

$str = "Тези знаци ($, *, ^) трябва да бъдат конвертирани."; echo quotemeta($str);

извежда този ред:

Изходни функции към външно устройство и към линия

Основните конструкции, използвани за изход, са print и echo, които бяха обсъдени подробно по-рано. Стандартният начин за извеждане на стойностите на променливите към външно устройство е да се включат имената на тези променливи в низ с двойни кавички (който се обработва от интерпретатора, за да замести стойностите на променливите), и след това да се предаде този низ към конструкцията за печат или ехо.

Ако имате нужда от още по-прецизно форматиран изход, можете да използвате функциите printf() и sprintf() на PHP. Тези две функции приемат едни и същи параметри: специален форматиращ низ, последван от произволен брой други параметри, които се заместват на правилните места във форматиращия низ, за ​​да се получи резултат. Единствената разлика между printf() и sprintf() е, че printf() изпраща резултатния низ директно към външното устройство, използвано за изход, докато sprintf() връща резултатния низ като резултат от неговото изпълнение.

Няколко думи за опитни програмисти на C. Тази версия на sprintf() се различава леко от версията на C по това, че sprintf() не трябва да предоставя разпределен низ за запис, тъй като PHP интерпретаторът разпределя памет за резултантния низ от името на потребителя.

Основната трудност, свързана с използването на тези функции, е правилното дефиниране на форматиращия низ. Всеки знак във форматиращия низ се появява директно в резултантната стойност, с изключение на знаците % и знаците, които следват непосредствено тези знаци. Символът % маркира началото на спецификация за преобразуване, която указва как да се изведе към външно устройство един от параметрите, който следва форматиращия низ.

След знака % има пет елемента, които съставляват спецификацията за преобразуване, които са описани по-долу, някои от които не са задължителни: подложка, подравняване, минимална ширина, прецизност и тип:

  • Незадължителен знак минус (-) се използва, за да посочи дали дадено число е отрицателно.
  • Единичният (незадължителен) знак за попълване е 0 или интервал (). Този символ се използва за запълване на всяко пространство, което иначе би останало празно, но което потребителят е настоял да избере (като зададе твърде висок параметър за минимална ширина). Ако този знак за допълване не е указан, той по подразбиране е запълване с интервали.
  • Незадължителният знак за подравняване (-) указва дали изходната стойност трябва да бъде подравнена отляво или отдясно. Ако този символ е посочен, тогава стойността ще бъде подравнена отляво, а ако не присъства, се прилага подравняване отдясно.
  • Незадължителна цифрова стойност с минимална ширина, която указва минималния брой позиции, които изходната стойност трябва да заема. (Ако изходните стойности изискват повече символни позиции от посочените, тогава изходната стойност е извън обхвата.)
  • Незадължителен спецификатор на точност, форматиран като точка (.), последвана от число. Спецификаторът показва с каква точност, измерена чрез броя на десетичните знаци след точката, трябва да бъде изведено число с плаваща запетая с двойна точност. (Прилагането на тази спецификация няма ефект върху изхода на данни, различни от числа с плаваща запетая с двойна точност.)
  • Единичен знак, указващ как трябва да се интерпретира типът стойност. Символът f показва, че стойността трябва да бъде отпечатана като число с плаваща запетая с двойна точност, знакът s показва, че стойността трябва да бъде отпечатана като низ, а останалите възможни знаци (b, c, d, o, x, X ) показват, че стойността трябва да се интерпретира като цяло число и да се изведе в различни формати. Тези формати са b за извеждане в двоичен формат, c за извеждане на знак със съответната стойност на ASCII код, o за извеждане в осмичен формат, x за извеждане в шестнадесетичен формат (с малки букви на цифрите). ) и X за показване шестнадесетични числа, които използват главни букви като буквални символи за цифри.

Следното е пример за извеждане на едно и също число с плаваща запетая с двойна точност по няколко различни начина:

%10f 
%-10f
%2.2f", $стойност, $стойност, $стойност, $стойност); ?>

Той дава следните резултати:

Конструкцията, използвана в този пример

...
е HTML дескриптор, който казва на браузъра, че блокът, затворен в този дескриптор, трябва да бъде форматиран буквално, без да се компресират множество интервали в едно и т.н.

Функции за работа с HTML код

PHP предоставя редица функции за манипулиране на низове, съдържащи специфични за мрежата данни. Общ преглед на тези функции е даден в таблицата по-долу:

Функции за низове, предназначени да работят с HTML код

функция Описание
htmlspecialchars() Той приема низ като параметър и връща низ, в който четири знака, които имат специално значение в езика HTML, са заменени със специални низове. Всеки от тези знаци се заменя със съответния HTML компонент, който се заменя отново с оригиналния знак, когато текстът на страницата се разгъва в браузъра. Символът & се заменя със символа & " (символ с двойна кавичка) - със знака "< - < а символ > - >
htmlentities() Извършва по-пълна обработка от htmlspecialchars(), т.е. замества с HTML компонента не само специални знаци, но и всички знаци, за които е предвидена замяна от HTML компонента
get_html_translation_table() Взема една от двете специални константи (HTML_SPECIAL_CHARS или HTML_ENTITIES) и връща таблица за преобразуване, използвана съответно от функциите htmlspecialchars() или htmlentities(). Справочната таблица е масив, чиито ключове са символни низове и чиито съответстващи стойности са низове, които ги заместват.
nl2br() Взема низ като параметър и връща същия низ, но с дескриптори
, вмъкнат преди всички знаци в края на реда (\n, \r или \r\n). Необходимостта от използване на тази функция възниква, например, ако искате да предоставите същото разделяне на текста, показван в браузъра, както в изходния текст
strip_tags() Взема низ като параметър и прави всичко възможно да формира низ, лишен от всички HTML дескриптори и всички PHP дескриптори

Хеширане на данни с помощта на алгоритъма MD5

Алгоритъмът MD5 е алгоритъм за обработка на низове, който се използва за генериране на така наречения дайджест или цифров подпис за всеки низ, подаден като параметър. Алгоритъмът генерира низ с постоянна дължина въз основа на входния низ, състоящ се от 32 шестнадесетични цифри (0-9, a-f). Резултатите, генерирани от алгоритъма MD5, имат много полезни свойства, както е описано по-долу:

  • Алгоритъмът MD5 винаги гарантира, че изходният низ е един и същ, когато му е даден същия входен низ, така че MD5 криптирането не може да се използва за съхраняване на пароли.
  • Резултатите от прилагането на алгоритъма MD5 имат фиксирана дължина и са много равномерно разпределени в целия диапазон от възможни стойности.
  • Може да се генерира входен низ, който съответства на даден изходен низ на алгоритъма MD5, или да се създадат два входни низа, обработката на които би довела до един и същ изходен низ, но само при определени условия.

Изпълнението на алгоритъма MD5 от PHP е налично като функцията md5(), която приема низ като вход и произвежда резултатите като дайджест от 32 знака. Например стартиране на следния код:

$str = "Здравей свят!"; echo "Хеш код за низ "$str": ".md5($str)."
"; $str = "Здравей, свят!"; echo "Хеш код за низ "$str": ".md5($str)."
"; $str = "Здравей свят"; echo "Хеш код за низ "$str": ".md5($str)."
";

води до следните резултати в прозореца на браузъра:

Разбира се, в този случай всички входни низове са много подобни един на друг, но изходните низове нямат видимо сходство. В допълнение, обхватът на възможните изходни стойности е изключително голям (1632), така че вероятността два различни низа да бъдат обработени (което ще произведе една и съща MD5 стойност) е изключително малко вероятна.

Поради горните характеристики на алгоритъма MD5, стойностите, получени с негова помощ, могат да се използват за решаване на голямо разнообразие от проблеми, включително тези, описани по-долу:
Изчисляване на контролната сума на съобщение или файл
За да проверите дали съобщението е било повредено по време на предаване, можете да изпратите MD5 дайджест заедно със съобщението и да генерирате повторно MD5 дайджест, когато съобщението бъде получено. Ако двете версии на дайджеста не съвпадат, тогава е направена повреда по време на предаването.
Контрол върху това дали съдържанието на файл остава непроменено
Тази задача е подобна на задачата за изчисляване на контролната сума. Алгоритъмът MD5 често се използва за извършване на тази операция в търсачките, ако се изисква периодично да се проверява дали дадена уеб страница е променена и да се индексира повторно, ако е необходимо. Факт е, че за по-нататъшна проверка е много по-лесно да се организира съхранението на дайджеста MD5, отколкото на целия изходен файл.
Разделяне на множество низове или файлове на подмножества
За да разрешите проблема с разделянето на набор от низове на N произволно избрани подмножества, можете да изчислите MD5 дайджеста на всеки низ, да вземете първите няколко шестнадесетични знака, да ги преобразувате в число, да получите модулно модулно на това число и да го използвате остатък като номер на подмножество, в което трябва да бъде записан този ред.

В допълнение към функцията md5(), PHP предоставя функцията md5_file(), която приема име на файл като параметър и връща хеширана MD5 стойност, съответстваща на съдържанието на файла.

Функции, предназначени да оценяват сходството на низове

На практика често се налага да се определи колко сходни са два низа. Очевидно резултатите от оценката на сходство на низове зависят от това какво се разбира под концепцията за сходство на низове.

Ако сходството в правописа се счита за критерий за оценка на сходството, тогава може да се приложи Метрика на Левенштейн. Функцията levenshtein() приема два низа като параметри и връща минималния брой операции за добавяне, изтриване и заместване на знаци, необходими за преобразуване на един низ в друг. Помислете за пример:

echo levenshtein("Тим", "Време"); // 1 echo levenshtein("момче", "chefboyardee"); // 9 echo levenshtein("никога", "умен"); // 2

Ако фонетичното сходство се счита за критерий за сходство, тогава функциите soundex() и metaphone() могат да се използват за оценка на сходството. И двете функции приемат въпросния низ като вход и връщат ключов низ, указващ категорията на произношението на дадената дума (която се третира като английска дума). Ако две думи, използвани като съдържание на входен низ, съответстват точно на една и съща изходна стойност, тогава е вероятно те да се произнасят по същия начин.

Функции за анализиране и токенизиране

Понякога се налага програмата да разделя низовете на компоненти, ръководена от собствената си дефиниция за това какво трябва да се счита за компонент. Процесът на разделяне на дълъг низ на части се нарича токенизация. По-специално, такъв процес е част от общата процедура за интерпретиране или компилиране на всяка компютърна програма, включително програма, написана на PHP. Езикът PHP предоставя специална функция за тази цел - strtok ().

Функцията strtok() приема два параметъра: низ за токенизиране и низ, съдържащ всички разделители (знаци, които се третират като граници между токени). При първото извикване и двата параметъра се използват и функцията връща низова стойност, представляваща първия токен. За да изберете следващи токени, се прави същото извикване, но параметърът на изходния низ се пропуска. Функцията запомня адреса на низа, даден в първия параметър, и го използва като текущия низ. В допълнение, тази функция помни къде е била прекратена обработката при предишното извикване. Разгледайте следния пример:

$token = strtok("сървърен уеб скрипт с вграден HTML с отворен код", " "); докато ($токен) (ехо $токен."
"; $token = strtok(" "); )

което води до следния изход в прозореца на браузъра:

Оригиналният низ се разделя на мястото, където се намира всяко пространство.

Функцията strtok() изгражда токени един по един. Можете също да използвате функцията explode(), която изпълнява приблизително същото, с изключение на това, че съхранява всички токени наведнъж в един масив. След получаване на токените, представени като масив, можете да извършвате всякакви операции с тях, включително сортиране.

Функцията explode() приема два параметъра: разделителен низ и низ, който трябва да бъде разделен на токени. Тази функция връща масив, всеки елемент от който е подниз между екземпляри на разделителя в низа, който трябва да бъде разделен. Разгледайте следния пример:

$explodeResult = explode("И", "едно И две И три");

което води до масив $explode_result, съдържащ три елемента, всеки от които е низ: "one", "a two" и "a three". В този конкретен пример не се срещат главни букви в нито един от низовете, съдържащи се в масива, тъй като разделителят И не присъства в резултата.

Разделителният низ, използван във функцията explode(), е доста различен от разделителния низ, използван във функцията strtok(). Разделителят е пълен низ, така че всички знаци в този низ трябва да бъдат намерени в изходния низ в същия ред като в разделителя, за да се счита, че разделителят е намерен.

От друга страна, ограничен низ във функцията strtok() определя много отделни знаци, всеки от които се третира като разделител. Това означава, че функцията explode() е по-селективна, но по-склонна към счупване. По-специално, ако дълъг низ случайно пропусне дори един интервал или знак за край на реда, който е част от разделителя, тогава цялата работа на тази функция може да бъде нарушена.

Функцията explode() има обратна функция, implode(), която приема два параметъра: свързващ низ (подобен на разделителния низ във функцията explode() и масив от низове, подобен на този, върнат от explode( ) функция. Функцията implode() връща низ, създаден чрез вмъкване на свързващ низ между всички последователни елементи на низ в масив.