PHP: Сравнение строк
Операции сравнения работают с числами и со строками. В PHP строки сравниваются лексикографически: посимвольно слева направо по числовым кодам символов.
<?php
var_dump('apple' < 'banana'); // => bool(true)
var_dump('cat' > 'dog'); // => bool(false)
var_dump('abc' === 'abc'); // => bool(true)
var_dump('hello' !== 'world'); // => bool(true)Здесь 'apple' < 'banana', потому что код a (97) меньше кода b (98), и именно первый символ решает исход сравнения. Код символа можно посмотреть с помощью функции ord():
<?php
print_r(ord('a')); // => 97
print_r(ord('b')); // => 98Сравнение чувствительно к регистру: код 'Z' (90) меньше кода 'a' (97). Пример сравнения, где первые буквы разного регистра:
<?php
var_dump('Zebra' < 'apple'); // => bool(true) — 'Z'(90) < 'a'(97)
var_dump('apple' < 'Banana'); // => bool(false) — 'a'(97) > 'B'(66)
var_dump('Apple' < 'apple'); // => bool(true) — 'A'(65) < 'a'(97)Напишем функцию, которая проверяет, начинается ли слово с заданной буквы. Для этого возьмем первый символ строки и сравним его с нужной буквой:
<?php
function startsWithLetter(string $word, string $letter): bool
{
return $word[0] === $letter;
}
var_dump(startsWithLetter('apple', 'a')); // => bool(true)
var_dump(startsWithLetter('banana', 'a')); // => bool(false)Операции сравнения представляют собой такие же выражения, как и арифметические. В них можно подставлять готовые значения и другие выражения, как в примере выше: $word[0]. Например, вместо числа можно использовать результат работы функции strlen(), которая возвращает длину строки:
<?php
var_dump(strlen('apple') > 3); // => bool(true), потому что strlen('apple') — это 5
var_dump(strlen('hi') > 3); // => bool(false), потому что strlen('hi') — это 2В примере выше сначала выполняется функция strlen('apple'), результатом будет число 5. Потом это число сравнивается с 3. Другими словами, сначала считаются аргументы выражения (например, длина строки), а потом выполняется операция сравнения.
Так можно комбинировать разные операции, получая более сложные проверки.
Полезные предикаты
В PHP есть много встроенных функций-предикатов для работы со строками. Они возвращают true или false и помогают проверять разные свойства строки. Ниже приведены самые часто используемые:
<?php
var_dump(str_starts_with('hello', 'he')); // => bool(true) — строка начинается с 'he'
var_dump(str_ends_with('hello', 'lo')); // => bool(true) — строка заканчивается на 'lo'
var_dump(str_contains('hello', 'ell')); // => bool(true) — строка содержит 'ell'Такие функции позволяют проверять строки на нужные условия прямо в коде, без написания дополнительных функций.
Задание
При регистрации на сайте программа проверяет, что пароль достаточно длинный — больше 5 символов. Напишите функцию isLongWord(), которая возвращает true, если длина переданного слова больше 5 символов, и false в противном случае.
Пример работы:
<?php
var_dump(isLongWord('apple')); // => bool(false)
var_dump(isLongWord('banana')); // => bool(true)Полезное
PHP: Сравнение строк
Операции сравнения работают с числами и со строками. В PHP строки сравниваются лексикографически: посимвольно слева направо по числовым кодам символов.
<?php
var_dump('apple' < 'banana'); // => bool(true)
var_dump('cat' > 'dog'); // => bool(false)
var_dump('abc' === 'abc'); // => bool(true)
var_dump('hello' !== 'world'); // => bool(true)Здесь 'apple' < 'banana', потому что код a (97) меньше кода b (98), и именно первый символ решает исход сравнения. Код символа можно посмотреть с помощью функции ord():
<?php
print_r(ord('a')); // => 97
print_r(ord('b')); // => 98Сравнение чувствительно к регистру: код 'Z' (90) меньше кода 'a' (97). Пример сравнения, где первые буквы разного регистра:
<?php
var_dump('Zebra' < 'apple'); // => bool(true) — 'Z'(90) < 'a'(97)
var_dump('apple' < 'Banana'); // => bool(false) — 'a'(97) > 'B'(66)
var_dump('Apple' < 'apple'); // => bool(true) — 'A'(65) < 'a'(97)Напишем функцию, которая проверяет, начинается ли слово с заданной буквы. Для этого возьмем первый символ строки и сравним его с нужной буквой:
<?php
function startsWithLetter(string $word, string $letter): bool
{
return $word[0] === $letter;
}
var_dump(startsWithLetter('apple', 'a')); // => bool(true)
var_dump(startsWithLetter('banana', 'a')); // => bool(false)Операции сравнения представляют собой такие же выражения, как и арифметические. В них можно подставлять готовые значения и другие выражения, как в примере выше: $word[0]. Например, вместо числа можно использовать результат работы функции strlen(), которая возвращает длину строки:
<?php
var_dump(strlen('apple') > 3); // => bool(true), потому что strlen('apple') — это 5
var_dump(strlen('hi') > 3); // => bool(false), потому что strlen('hi') — это 2В примере выше сначала выполняется функция strlen('apple'), результатом будет число 5. Потом это число сравнивается с 3. Другими словами, сначала считаются аргументы выражения (например, длина строки), а потом выполняется операция сравнения.
Так можно комбинировать разные операции, получая более сложные проверки.
Полезные предикаты
В PHP есть много встроенных функций-предикатов для работы со строками. Они возвращают true или false и помогают проверять разные свойства строки. Ниже приведены самые часто используемые:
<?php
var_dump(str_starts_with('hello', 'he')); // => bool(true) — строка начинается с 'he'
var_dump(str_ends_with('hello', 'lo')); // => bool(true) — строка заканчивается на 'lo'
var_dump(str_contains('hello', 'ell')); // => bool(true) — строка содержит 'ell'Такие функции позволяют проверять строки на нужные условия прямо в коде, без написания дополнительных функций.
Задание
При регистрации на сайте программа проверяет, что пароль достаточно длинный — больше 5 символов. Напишите функцию isLongWord(), которая возвращает true, если длина переданного слова больше 5 символов, и false в противном случае.
Пример работы:
<?php
var_dump(isLongWord('apple')); // => bool(false)
var_dump(isLongWord('banana')); // => bool(true)Полезное
Ваше упражнение проверяется по этим тестам
<?php
namespace HexletBasics\Logic\BoolStrings;
use HexletBasics\Exercise\TestCase;
class SolutionTest extends TestCase
{
public function test()
{
$this->assertFalse(isLongWord('apple'));
$this->assertTrue(isLongWord('banana'));
$this->assertTrue(isLongWord('pineapple'));
}
}Решение учителя откроется через:
20:00
