Php сложение строк

Конкатенацию строк, а точнее добавление одной строки в конец другой можно использовать двумя способами.

1. $a = $a. $b;
2. $a .= $b;

Опытные программисты вряд ли используют первый вариант, а вот новички вполне могут.

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

Чтобы это себя проявило, строка $b должна быть не менее 40 символов. Количество итераций — порядка 10000.

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

Комментарий пользователя gribozavr:

> Первый вариант выполнятеся в сотни раз дольше.

Естественно (говорю даже не запуская). Смотрите:

1. Происходит вычисление правой части, в результате создаётся новая строка в памяти, и $a присваивается эта строка (в результате чего предыдущее значение внутри $a выбрасывается). Итого: одно выделение памяти, одно освобождение, два копирования.

2. Происходит добавление к уже существующей строке, присваивания нет, происходит по сути просто увеличение буфера, и максимум одно копирование.

Вот кусок кода, которые каждый может проверить у себя сам:

<? php

$a = NULL;
$b = «Довольно длинная строка, символов эдак 40»;
$start = microtime(1);

for($i=0;$i<10000;$i++) {
$a = $a. $b;
}

$end = microtime(1);
$time = $end — $start;
echo $time.«
»;

$a = NULL;
$b = «Довольно длинная строка, символов эдак 40»;
$start = microtime(1);

for($i=0;$i<10000;$i++) {
$a .= $b;
}

$end = getmicrotime(1);
$time = $end — $start;
echo $time;

?>

UPD: По просьбе трудящихся переношу сюда из личного блога.

UPD: В комментариях в другой ветке один товарищ (f33l) написал, что это все-таки баг и дал ссылку:
bugs.php.net/bug.php? id=44069
Исправлен баг как раз в версии 5.2.6. Хотя у меня на хостинге тоже 5.2.6, но «проблема» наблюдается.
В баге говорится об утечке памяти, но судя по комментарию в обсуждении к топику, на время выполнения это тоже повлияло.

habr.com

Доступ к символу в строке

На дворе весна, а потому нашим подопытным кроликом станет следующая строчка:

<?php $myString = 'Spring has come!'; ?>

Сразу скажу, что я не просто так написал фразу на английском. С русскими символами в строке всё всегда немного сложнее, а так как мы только начали своё обучение, отвлекаться на лишние нюансы не стоит, только запутаетесь. Продолжим. В PHP порядковый счёт начинается с нуля, а значит, первый символ в строке (буква «S») будет под порядковым номером ноль. Чтобы её достать достаточно написать следующее:

<?php header('Content-Type: text/html; charset=utf-8'); 
$myString = 'Spring has come!';
echo $myString{0}; ?>

Результат:

символ в строке PHP

То есть, чтобы получить букву «i» нам нужно взять 4 символ из строки, но учитывая, что счёт начинается с нуля, то третий:

<?php $myString = 'Spring has come!'; echo $myString{3}; ?> 

Бывают нередкие случаи, когда мы не знаем, сколько символов ожидать в строке, но точно знаем, что нам нужно взять, например, последний. В таком случае мы воспользуемся встроенной функцией PHP (их очень много) под названием strlen(), которая возвращает длину строки. Но этого нам будем мало, так как функция всего лишь вернёт нам число – количество символов в строке, а в PHP, как вы уже знаете, порядковый счёт начинается именно с нуля, поэтому логичным шагом будет вычесть от общего количества символов в строке единицу, чтобы получить порядковый номер последнего символа.

<?php header('Content-Type: text/html; charset=utf-8'); 
$myString = 'Spring has come!';
$last = strlen($myString)-1; // 16-1=15 echo $myString{$last}; ?>

Результат пора уже самим проверять 😉

То же самое в PHP можно записывать и в одну строчку:

<?php header('Content-Type: text/html; charset=utf-8'); $myString = 'Spring has come!'; echo $myString{strlen($myString)-1}; // одной строкой ?> 

Операторы в PHP

Арифметические операторы

С большинством операторов все мы знакомы ещё со школы – это знаки деления, вычитания, умножения и сложения. В PHP они называются арифметическими операторами.

<?php $a + $b // Сумма $a и $b $a - $b // Разность $a и $b $a * $b // Произведение $a и $b $a / $b // Частное от деления $a на $b $a % $b // Целочисленный остаток от деления $a на $b // 5/2 равно 2.5, но 5%2 равно 1  $a += $b // Тоже, что и $a = $a + $b. Остальные операторы работают аналогично. ?> 

Так как PHP не строго типизированный язык, то в нём есть возможность складывать слова и числа и на выходе всегда получать число. Тоже самое и с булевым типом, если мы попробуем прибавить к TRUE число 5, то в итоге получим 6, так как TRUE (мы уже с вами говорили) приравнивается к единице. Давайте рассмотрим остальные возможные случаи арифметических действий, где одно из выражений не число вовсе:

 <?php $a = true;    // 1 $b = $a * 10; // 10 
$a = false;   // 0 $c = $a * 10; // 0
$a = '5';     // 5 $d = $a * 10; // 50
$a = 'Hello'; // 0 $f = $a * 10; // 0
$a = '5Hello';// 5 $g = $a * 10; // 50
$a = '52Hello'; // 52 $h = $a * 10;   // 520
$a = '52He7ll8o'; // 52 $j = $a * 10;     // 520 ?>

С первым всё ясно, раз FALSE значит либо пустая строка, либо в нашем случае ноль. Если написать число как строку, то есть в одинарных или двойных кавычках, то PHP всё равно посчитает его как число. Просто любая строка (без цифр) приравнивается к нулю. В последних трёх случаях в наших строках есть и буквы и цифры, в этом случае PHP оставит все цифры до первой встреченной буквы.

Операторы сравнения

Далее у нас идут операторы сравнения. Существуют два вида сравнения: мягкое (гибкое) и жёсткое. Различие в том, что при жёстком сравнении PHP не будет пытаться привести всё к одному типу, как в предыдущем примере, когда всё приводилось к числам. Пример:

 <?php $a == $b // TRUE если $a равно $b. $a === $b // TRUE если $a равно $b и имеет тот же тип 
'5' == 5 // TRUE '5' === 5 // FALSE ?>

При этом обращаю ваше внимание на то, что просто знак равенства (=) является оператором присвоения, а не сравнения! Поэтому чтобы сравнить мы должны использовать либо два, либо три знака равенства подряд, в зависимости от нужного нам типа сравнения. Для тех, кто ещё плохо ориентируется в приведении одного типа к другому будут полезны следующие две таблички:

мягкое (гибкое) сравнение

жёсткое сравнение в PHP

Как видите, при жёстком сравнении TRUE только по главной диагонали.

Зачастую бывает, что нам нужно идти от обратного, то есть мы хотим получить TRUE, когда одно не равно другому. Для этого пишем так:

 <?php $a != $b // TRUE если $a не равно $b. $a !== $b // TRUE если $a не равно $b ИЛИ в случае, если они разных типов. 
'5' != 5 // FALSE '5' !== 5 // TRUE
'10' != 5 // TRUE '10' !== 5 // TRUE
10 != 5 // TRUE 10 !== 5 // TRUE ?>

Обратите, пожалуйста, ещё раз своё внимание, когда мы проверяем на неравенство, то пишем на 1 знак равно (=) меньше, его нам заменяет восклицательный знак вначале. Остальные четыре оператора сравнения нам хорошо известны из математики:

<?php $a < $b // TRUE если $a строго меньше $b. $a > $b // TRUE если $a строго больше $b. $a <= $b // TRUE если $a меньше или равно $b. $a >= $b // TRUE если $a больше или равно $b. ?> 

Логические операторы

Следующими у нас по плану идут логические операторы:

 <?php $a and $b // TRUE если и $a, и $b TRUE. $a && $b // Тоже самое, но имеет больший приоритет, то есть проверка выполнится сначала на это выражение. 
$a or $b // TRUE если или $a, или $b TRUE. $a || $b // Тоже самое, но имеет больший приоритет, то есть проверка выполнится сначала на это выражение.
!$a // TRUE если $a не TRUE. ?>

Пример:

 <?php (2>1) and (15>0) // TRUE (2>1) and (15>20) // FALSE 
(2>1) or (15>0) // TRUE (2>1) or (15>20) // TRUE
$a = 0; !$a // TRUE
unset($a); !$a // TRUE
$a = NULL; !$a // TRUE
$a = 2; !$a // FALSE
$a = 'Hello'; !$a // FALSE
$a = '2'; !$a // FALSE ?>

Операторы условия

И в заключении мы рассмотрим условный оператор if (если), который используется «везде и всюду». Результатом выполнения этого оператора является исполнение кода внутри условия, если условие TRUE или неисполнение кода, если условие вернуло FALSE. Как это выглядит:

 <?php header('Content-Type: text/html; charset=utf-8'); 
if (2>1) {   echo 'Это правда!'; } echo '<br />Остальная часть страницы, она вне условия'; ?>

Результат:

операторы условия

То есть мы видим, что когда условие внутри круглых скобочек выдаёт TRUE, то выполняется код внутри фигурных скобочек. Ещё пример:

 <?php header('Content-Type: text/html; charset=utf-8'); if (2>5) {   echo 'Это правда!'; } echo '<br />Остальная часть страницы, она вне условия'; ?> 

Результат:

операторы

В данном случае 2 не больше 5, а значит условие неверно, то есть FALSE.

Кроме того, чтобы выполнять код по приходу TRUE, мы можем указать, что необходимо сделать, если придёт FALSE. В этом нам поможет конструкция под названием else (иначе):

 <?php header('Content-Type: text/html; charset=utf-8'); 
if (2>0) { echo '<span style="color:green">Да, это правда.</span>'; } else { echo '<span style="color:red">Нет, это ложь!</span>'; }
echo '<br />Остальная часть страницы, она вне условия'; ?>

Результат:

конкатенация

<?php header('Content-Type: text/html; charset=utf-8'); 
if (2>48){ echo '<span style="color:green">Да, это правда.</span>'; } else{ echo '<span style="color:red">Нет, это ложь!</span>'; }
echo '<br />Остальная часть страницы, она вне условия'; ?>

Результат:

конкатенация - склеивание

Немного о синтаксисе.

Во-первых, вы можете ставить пробелы и переносы строк везде, где захотите, а можете вообще нигде не ставить (обычно я не ставлю пробелов).

Во-вторых, фигурные скобочки можно не указывать, если внутри них всего 1 строка, как в наших примерах выше. То же самое можно было записать так:

 <?php header('Content-Type: text/html; charset=utf-8'); 
if (2>48) echo '<span style="color:green">Да, это правда.</span>'; else echo '<span style="color:red">Нет, это ложь!</span>';
echo '<br />Остальная часть страницы, она вне условия'; ?>

И даже в одну строчку:

 <?php header('Content-Type: text/html; charset=utf-8'); 
if (2>48) echo '<span style="color:green">Да, это правда.</span>'; else echo '<span style="color:red">Нет, это ложь!</span>';
echo '<br />Остальная часть страницы, она вне условия'; ?>

Но если строчек больше чем одна, фигурные скобки обязательны!

В-третьих, сразу после else можно объявить новое условие if, это делается с помощью конструкции elseif (иначе, если…) так:

 <?php header('Content-Type: text/html; charset=utf-8'); 
if (2>48) {   echo '<span style="color:green">Да, это правда.</span>'; } elseif (5>0 and 10=='10') { echo '<span style="color:green">Вот это правда!</span>'; } else { echo '<span style="color:red">Опять ложь!!!</span>'; }
echo '<br />Остальная часть страницы, она вне условия'; ?>

Результат:

PHP конкатенация

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

Тернарный оператор

Перед тем, как дать вам первое домашнее задание, расскажу ещё один нюанс синтаксиса. Вот это:

 <?php header('Content-Type: text/html; charset=utf-8'); 
if (2>48){ echo '<span style="color:green">Да, это правда.</span>'; } else{ echo '<span style="color:red">Нет, это ложь!</span>'; }
echo '<br />Остальная часть страницы, она вне условия'; ?>

Можно было записать с помощью тернарного оператора:

 <?php header('Content-Type: text/html; charset=utf-8'); 
echo (2>48) ? '<span style="color:green">Да, это правда.</span>' : '<span style="color:red">Нет, это ложь!</span>';
echo '<br />Остальная часть страницы, она вне условия'; ?>

Результат:

конкатенация - склеивание

Это то же самое, только короче – всё в одну строку. Лично я редко им пользуюсь, но иногда так действительно удобней.

Ну что, знаний у нас накопилось уже достаточно, пришло время сделать что-то собственными руками. Сразу говорю, блок-схему рисовать не буду, так как это слишком наглядно.

Условие:

Если решение выражения (14+$b-86*2)/(100+$b), где $b= 20, -14, 16 (проверить со всеми тремя значениями) противоположно числу 2 и при этом числитель и знаменатель дроби не равны между собой и не равны $b, то выводим в браузер решение выражения. Иначе выводим в браузер четвёртый символ из строки с решением выражения при условии, что сумма 3 и 4 символов не равна пяти. Для решения задачи можно использовать ТОЛЬКО материалы текущей и предыдущих статей. Пользоваться дополнительными справочниками и литературой запрещено. Моё решение данной задачи смотрите в следующей статье, чтобы не пропустить, можете подписаться на обновления (подписка в правой колонке или в самом верху ;)). Удачи!

site-on.net

Как делается конкатенация в php?

Итак, оператором конкатенации или соединения строк в php является точка. Посмотрите на этот пример кода:конкатенация

Две строчки выведутся абсолютно идентично. Как вы помните, строка в php заключается в двойные кавычки. Если вы хотите соединить несколько строк и записать их вместе, просто ставьте точку между ними. Естественно, каждая строка должна оставаться в кавычках. Пробелы до и после точки не являются обязательными, это просто мой стиль написания.

А вот пробелы в самих строках нужны и важны. Для чего? Без них между строками не было бы отступов. Кстати, в первом примере мы соединили строку и тег br, который переносит текст на следующую строчку, хотя можно было бы написать все слитно.

Как соединить строки, если они в переменных?

Представим, что наши слова лежат в двух переменных и их нужно соединить, чтобы вывести одно предложение:

$a = "PHP - это очень хороший язык"; $b = "программирования";

Как это сделать? Очень просто, вот так:
echo $a.$b;

Как видите, точка подходит и для сложения переменных. В этом случае никаких кавычек не нужно, потому что переменные не заключаются в кавычки. Единственное, чтобы между словами «язык» и «программирования» был пробел, необходимо в значениях переменных добавить пробел на конце одного слова, либо в начале второго.

Итог и смешанная конкатенация

Как видите, ничего сложного. Теперь вы знаете, как делается соединение строк в одну. Тут важно еще заметить, что вы легко можете складывать строки и переменные вместе. При этом важно строчные данные заключать в кавычки, с переменными же этого делать не нужно, хотя работать в двойных кавычках они будут, а вот в одинарных — нет.

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

dolinacoda.ru

Строка в двойных кавычках

Строка в двойных кавычках:

  $str = "Строка";    echo "Одну большую строку можно   разбить на несколько маленьких строк,   чтобы её было удобнее читать.";  

В строках с двойными кавычками можно использовать управляющие последовательности. Управляющая последовательность — это специальные символы предназначенные для форматирования текстового вывода. В PHP доступны следующие управляющие последовательности:

Последовательность Значение
n Перевод на новую строку (шестнадцатеричный код 0A).
t Горизонтальная табуляция (шестнадцатеричный код 09).
\ Обратная косая черта (обратный слэш).
$ Знак доллара.
" Двойная кавычка.
xXX Символ, заданный одной или двумя шестнадцатеричными цифрами.

Основным свойством строк в двойных кавычках является возможность обработки переменных внутри строк.

  $num = 10;  echo "Число: $num <br> Знак доллара: $";  

Строки, заключённые в двойные кавычки, могут содержать символы одинарных кавычек:

  echo "Одинарная кавычка: '";  

Строка в одинарных кавычках (апострофах)

Строка в одинарных кавычках:

  $str = 'Строка';    echo 'Одну большую строку можно   разбить на несколько маленьких строк,   чтобы её было удобнее читать.';  

В отличие от строк в двойных кавычках и heredoc-синтаксиса, переменные и управляющие последовательности (за одним исключением), заключённые в одинарные кавычки, не обрабатываются. Это означает, что они будут интерпретированы как обычные символы строки:

  $num = 10;  echo 'Число: $num <br> Знак доллара: $';  

Чтобы в строке, заключённой в одинарные кавычки, можно было использовать одинарные кавычки, нужно их экранировать с помощью обратного слэша ('). Если необходимо написать саму обратную косую черту, нужно продублировать её (\):

  echo 'Внутри используются 'одинарные' кавычки';  echo 'Обратный слэш: \';  

Строки, заключённые в одинарные кавычки, могут содержать символы двойных кавычек:

  echo 'Двойная кавычка: "';  

Heredoc-синтаксис

Heredoc-синтаксис — это альтернативный способ записи строк.

Строка, определяемая с помощью Heredoc-синтаксиса, работает также, как и строка, расположенная в двойных кавычках. Разница между Heredoc и строкой в двойных кавычках заключается в том, что используя Heredoc нет необходимости экранировать двойные кавычки.

Heredoc-синтаксис начинается с трёх символов <<<, после которых должен быть указан произвольный идентификатор (назовём его открывающим). Идентификатор может быть указан как в двойных кавычках, так и без них. Сразу после идентификатора должен следовать перевод на новую строку, никаких других символов кроме перевода на новую строку после идентификатора не должно быть, иначе возникнет ошибка. Далее идёт непосредственно строковое содержимое. После строкового содержимого, на отдельной строке, должен быть указан закрывающий идентификатор (тот же, что и после <<<). Перед ним и после него не должно быть никаких пробелов или других символов, за исключением точки с запятой. Если это правило нарушено, то считается, что закрывающий идентификатор отсутствует и будет вызвана ошибка:

  <<<some_id  Hello   "World!"  some_id;    $num = 10;  echo <<<"other_id"  Число: $num  other_id;  

Nowdoc-синтаксис

Nowdoc-синтаксис также как и Heredoc является альтернативным способом записи строк.

Строка, определяемая с помощью Nowdoc-синтаксиса, работает также, как и строка, расположенная в одинарных кавычках. Разница между Nowdoc и строкой в одинарных кавычках заключается в том, что используя Nowdoc нет необходимости экранировать одинарные кавычки.

Синтаксис Nowdoc похож на Heredoc с той лишь разницей, что открывающий идентификатор обязательно должен быть заключён в одинарные кавычки:

  $num = 10;  echo <<<'some_id'  Число: $num  some_id;  

Обработка переменных в строках

Существует два типа синтаксиса обработки переменных в строках: простой и сложный.

Простой синтаксис — это когда имя переменной указывается в строке как есть.

Когда интерпретатор встречает знак доллара, он начинает последовательно проверять являются ли все последующие символы допустимыми символами в имени переменной. Таким образом, чтобы сформировать правильное имя переменной, он захватывает так много символов, на сколько это возможно:

  $str = "World!";  echo "Hello $str";  

Сложный синтаксис — это когда имя переменной заключается в фигурные скобки.

Так как, для обработки переменной в строке, интерпретатор захватывает так много символов, на сколько это возможно бывают ситуации когда интерпретатор не способен самостоятельно определить, где оканчивается имя переменной:

  $sport1 = 'волей';  $sport2 = 'фут';    echo "Мне нравится $sport1бол и $sport2бол";  

В данном случае не будет достигнут желаемый результат, поскольку интерпретатор будет считать $sport1 как часть имени переменной $sport1бол, которой не существует.

Чтобы явно указать интерпретатору, где оканчивается имя переменной требуется заключить имя переменной в фигурные скобки:

  $sport1 = 'волей';  $sport2 = 'фут';    echo "Мне нравится {$sport1}бол и {$sport2}бол.";  

Знак доллара может быть расположен как перед фигурной скобкой, так и после неё:

  $sport1 = 'волей';  $sport2 = 'фут';    echo "Мне нравится ${sport1}бол и {$sport2}бол.";  

Конкатенация

Конкатенация — это объединение двух или более строк в одну большую. Объединение происходит с помощью оператора конкатенации — . (точка). При конкатенации каждая последующая строка добавляется в конец предыдущей:

  <?php  echo 'Из двух строк ' . 'делаем одну большую';  ?>  

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

  <?php  $str = "Число: ";  $num = 12;    echo $str . $num . '<br>';  echo 'Число: ' . 1;  ?>  

puzzleweb.ru

You May Also Like

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.