Урок 3: доступ к символу в строке, операторы PHP, конкатенация строк в PHP

"Все аспекты самостоятельного создания и продвижения сайтов
от практика с многолетним опытом." — блог Рудь Сергея
info@site-on.net
Заметка: активирована адаптивная версия сайта, которая автоматически подстраивается под небольшой размер Вашего браузера и скрывает некоторые детали сайта для удобства чтения. Приятного просмотра!
13.04.2013

Добрый день, уважаемые читатели блога Site on! Это четвёртая по счёту статья и если вы до неё добрались, значит вы действительно настроены на обучение и желаете узнать всю подноготную работы с PHP. Этим мы сегодня с вами и продолжим заниматься, а именно мы научимся: как работать с конкретным символом внутри строки, рассмотрим операторы в PHP и продолжим знакомство с конкатенацией. Также вам будет предложено решить задачу, которая поможет подытожить полученные знания.

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

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

<?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 символов не равна пяти. Для решения задачи можно использовать ТОЛЬКО материалы текущей и предыдущих статей. Пользоваться дополнительными справочниками и литературой запрещено. Моё решение данной задачи смотрите в следующей статье, чтобы не пропустить, можете подписаться на обновления (подписка в правой колонке или в самом верху ;)). Удачи!

Конкатенация строк в PHP

Конкатенация - это склеивание нескольких строк в одну. При конкатенации используется так называемый строковый оператор, он обозначается обыкновенной точкой (.),пробелы перед и после точки можете ставить, а можете не ставить, как вам удобней. Было у нас несколько строк, хотим положить одну к другой, используем конкатенацию. Посмотрим как это работает:

<?php
$a = "Hello ";
$b = $a . "World!";  // $b содержит строку Hello World!

$a = "Hello "; $a .= "World!"; // $a содержит строку Hello World!
$a = "Hello"; $b = "World!"; print $a . " " . $b; // Hello World! ?>

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

Всем спасибо за внимание, на сегодня всё. Если что-то не очень понятно, не обессудьте, пишу всё на общественных началах :) Оставляйте ваши замечания в комментариях, буду прислушиваться и делать выводы. Желаю удачи и до встречи на страницах Site on!

С уважением, .
Пожалуйста, оцените эту статью
Средняя оценка: 4.5 из 5 (проголосовало: 12)
Статья оказалась вам полезной? Подпишитесь, чтобы не пропустить новые!

Ваш email:
Вы можете помочь развитию проекта, сделав всего 1 клик:
Спасибо!
Пожалуйста, прокомментируйте, как Вам моя статья?
Имя:
Комментарий:

Если Вы хотите вставить код, пожалуйста, заключайте его в [code][/code]

Подписаться на новые комментарии:

E-mail:


Защита от спама: пожалуйста, напишите слово "сел" справа налево
Ответ:
Подписаться на новые комментарии без комментирования - Email:
Защита от спама: пожалуйста, напишите слово "сел" справа налево
Ответ:

07.05.2014 22:20:03 Степан:
Правда для моей задачи сто процентов есть более компактные способы решения, но я их не нашел, поэтому, спасибо, вы мне помогли.

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


19.01.2015 21:57:46 Александр:
Изучаю по Вашим материалам. Считаю материалы отличными, во всяком случае для меня, как для чайника. Спасибо.

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

Использую для работы
Мои расширения
Свежие статьи
Рекомендую
Горячо обсуждаемые
Подписка
  • Следовать в twitter:
  • Подписаться по RSS:
  • Подписаться по E-mail:
  • Следить ВКонтакте:
  • Следить на Facebook:
Пользовательское соглашение об условиях использования сайта и Политика конфиденциальности
Перепечатывание или копирование материалов сайта (текста, изображений и другого содержимого) для их публичного или коммерческого использования в сети Интернет, либо в печатных изданиях строго запрещены. При нарушении данного правила, с нашей стороны будут предприняты соответствующие меры, вплоть до судебной жалобы.
© site-on.net
Шрифт: +стандартно-