Главная > Программирование > РНР: настольная книга программиста
<< Предыдущий параграф
Следующий параграф >>
<< Предыдущий параграф Следующий параграф >>
Макеты страниц

25.7. Доступ с операциями замены строк или подстрок, сравнение строк в PHP

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

• strcasecmp(),

• strncasecmp(),

• substr(),

• strstr(),

• strnatcmp(),

• substr_replace(),

• str_replace().

Первые две функции позволяют производить сравнение строки определенного количества символов. Чтобы произвести бинарное сравнение двух строк, используют функцию strcasecmp(). Она позволяет сравнивать строки без учета регистра. Ее синтаксис:

int strcasecmp(string str1, string str2)

Параметры str1 и str2 задают значения сравниваемых строк. Функция возвращает целое число, равное нулю, если две строки идентичны с учетом двоичного исчисления. Если str1 меньше, чем str2, то функция возвратит целое значение меньше нуля. Если srt1 будет больше str2, функция возвратит целое значение больше нуля. Зная эти тонкости, вы можете спокойно работать с оператором условия. В приведенном ниже примере будут рассмотрены способы сравнения.

Если нужно сравнить не всю строку сразу, а определенное количество символов этой строки, применяют функцию strncasecmp(). Она имеет следующий синтаксис:

int strncasecmp(string str1, string str2, int len)

На месте параметра len указывается количество символов, отсчитываемых с начала строк str1 и str2. Это целое число. Все, что касается функции strcasecmp(), работает и при использовании функции Приведем пример, характеризующий функции strcasecmp() и strncasecmp():

<?php

$var1 = "TABLE";

$var2 = "table";

if (!strcasecmp($var1, $var2)) {

    echo 'Значение переменной $var1 эквивалентно $var2 без учета регистра <br>';

}

$var3 = "World" ;

$var4 = "Hello";

if ($int = strcasecmp($var3, $var4)) {

    echo ' Значения переменных $var3 и $var4 не одинаковы между собой<Ьг>';

}

$var5 = "World";

$var6 = "He";

if ($int = strcasecmp($var5, $var6) ) {

echo ' Значения переменных $var5 и $var6 не одинаковы между

    собой<br>';

}

$var7 = "Vitalik";

$var8 = "Vitiya";

if {

    echo "Первые три символа эквивалентны <br>";

}

?>

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

значениями. Функция сравнивает бинарный код этих строк, и за счет того, что значения этого кода будут различны, функция выдаст соответствующий результат. В третьей части программы происходит обычное сравнение количества символов строк, только эти строки имеют разные длины. Четвертая часть — пример сравнения строк при помощи функции strncasecmp(). Результат этого скрипта приведен ниже:

Значение переменной $var1 эквивалентно $var2 без учета регистра

Значения переменных $var3 и $var4 не одинаковы между собой

Значения переменных $var5 и $var6 не одинаковы между собой

Первые три символа эквивалентны

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

Функция strcasecmp() работает в РНР 3—3.0.2и РНР 4; функция strncasecmp() — в РНР 4-4.0.2.

Очень часто при работе со строками программисту необходимо получить какую-либо определенную последовательность символов имеющейся строки. Для этого используется функция Она позволяет получать любую часть строки с учетом указанных параметров. Ее синтаксис:

string substr (string string, int start [, int length])

Функция возвращает вырезанную часть символов строки string, определяемую параметрами start (начало) и length (длина).

Если параметр start положительный, то возвращаемая строка будет начинаться со start-го символа строки string.

$string = substr ("abcdef", 1); // возвратит "bcdef"

$string = substr ("abcdef", 1, 3); // возвратит "bcd"

Если параметр start отрицательный, то возвращаемая строка будет начинаться со start-го символа от конца строки string.

$string = substr ("abcdef", -1); // возвратит "f"

$string = substr ("abcdef", -2); // возвратит "ef"

$string = substr ("abcdef", -3, 1); // возвратит "d"

Если параметр length указан и он положительный, то возвращаемая строка закончится и через length символов от начала start. Если length указан и он отрицательный, то возвращаемая строка закончится через length от конца строки string.

$rest = substr("abcdef", 1,-1); // возвратит "bcde"

Функция strstr() позволяет находить указанный символ и выводить все далее следующие за ним символы в строку. Другими словами, осуществляет поиск указанного символа и при встрече первого символа, который был указан, функция возвратит оставшуюся часть строки. Приведем синтаксис функции:

string strstr (string haystack, string needle)

В качестве параметра haystack указывается строка, вместо параметра needle — тот фрагмент символов, который необходимо найти. После указания всех параметров функция произведет возврат строки, начиная с той части, откуда был указан параметр needle. При этом указанные символы needle не будут удалены, а будут добавлены в начало строки. Приведем пример:

<?php

$string= ' Sasha+Igor ' ;

$foo = strstr ($string, ' + ');

print $foo;

$string1 = ' Sasha+Igor+Sveta';

$foo1 = strstr ($string1, '+S');

print $foo1;

?>

Результат программы:

+Igor

+Sveta


ВНИМАНИЕ

Функция strstr() является чувствительной к регистру. Функция stristr() является полной аналогией strstr(), но не чувствительна к регистру.


Иногда возникает необходимость произвести сортировку строк. При этом можно осуществлять стандартную сортировку строк и натуральную. Например:

<?php

$arrl = $arr2 = array ("Pic12.jgp", "Pic10.jgp" ,"Pic2.jgp" ,"Pic1.jgp");

echo "Стандартная сортировка строк\n";

usort($arr1,"strcmp");

print_r($arr1);

echo "\nНатуральный порядок сортировки строк\n";

usort($arr2,"strnatcmp");

print_r($arr2);

?>

В примере для сортировки были использованы функции strcmp() и strnatcmp(). Результат работы этого скрипта:

Стандартная сортировка строк

Array (

[0] => Pic1.jgp

[1] => Pic10.jgp

[2] => Pic12jgp

[3] => Pic2.jgp

)

Натуральный порядок сортировки строк

Array (

[0] => Pic1.jgp

[1] => Pic2.jgp

[2] => Pic10.jgp

[3] => Pic12.jgp

)

Функции strnatcmp() и strcmp() практически аналогичны и имеют следующий синтаксис:

int strnatcmp(string str1, string str2)

int strcmp(string str1, string str2)

Функция strnatcmp() сортирует строки с учетом натурального порядка. Она возвращает значение, равное нулю, если строки идентичны. Обратите внимание, что функции strnatcmp() и strcmp() чувствительны к регистру. Функция strcmp() осуществляет стандартную сортировку строк, как показано в примере.

Для замены текста в пределах части строки в РНР существует несколько функций. Функция substr_replace() позволяет заменять указанный текст в заданной части строки. Рассмотрим синтаксис функции substr_replace():

string substr_replace (string string, string replacement, int start [, int length])

Функция возвращает строку, измененную с учетом указанных параметров. В качестве параметров задаются string — строка, которую мы собираемся изменять, replacement — та строка, при помощи которой мы собираемся изменять, start — целое значение — количество символов, отсчитываемых от начала строки, length — длина строки, которую будем изменять, подставив строку replacement вместо указанного количества символов.

Приведем пример:

<?php

$var = 1 QWERTY: ASDFGH';

echo "Первоначальная строка: $var<hr>\n";

echo 'Замена с указанными параметрами: ($,var, "XXX", 0), в результате получаем: <br>';

echo substr_replace ($var, 'XXX', 0). "<br><br>\n";

echo 'Замена с указанными параметрами: ($var, "XXX", 0, strlen($var)), в результате получаем: <br>';

echo substr_replace ($var, 'XXX', 0, strlen ($var)) . "<br><br>\n";

echo 'Замена с указанными параметрами: ($var, "XXX", 0, 0),

в результате получаем: <br>';

echo substr_replace($var, 'XXX', 0, 0). "<br><br>\n";

echo 'Замена с указанными параметрами: ($var, "XXX", -10, 5), в результате получаем: <br>';

echo substr_replace($var, 'XXX', -10, 5). "<brXbr>\n";

echo 'Замена с указанными параметрам: ($var, "XXX", 10, -1) , в результате получаем: <br>';

echo substr_replace($var, 'XXX', 10, -1). "<brXbr>\n";

echo 'Замена с указанными параметрами: ($var, "XXX", -7, -1), в результате получаем: <br>';

echo substr_replace($'var, 'XXX', -7, -1). "<brXbr>\n";

echo 'Замена с указанными параметрами: ($var, "", 10, -1), в результате получаем: <br>';

echo substr_replace($var, 10, -1). "<br><br>\n";

?>

Результатом этого примера будут следующие строки:

Первоначальная строка: QWERTY: AS DFGH

Замена с указанными параметрами: ($var, "XXX", 0), в результате получаем:

XXX

Замена с указанными параметрами: ($var, "XXX", 0, strlen ($var)), в результате получаем:

XXX

Замена с указанными параметрами: ($var, "XXX", 0, 0), в результате получаем:

XXXQWERTY: ASDFGH

Замена с указанными параметрами: ($var, "XXX", -10, 5), в результате получаем:

QWEXXXSDFGH

Замена с указанными параметрами: ($var, "XXX", 10, —1), в результате получаем:

QWERTY:ASDXXXH

Замена с указанными параметрами: ($var, "XXX", -7, -1), в результате получаем:

QWERTYXXXH

Замена с указанными параметрами: ($var, "", 10,-1), в результате получаем:

QWERTY:ASDH

Функция substr_replace() была добавлена в РНР 4.0.

Функция str_replace() относится к этому же ряду функций, осуществляющих замену строк. Функция str_replace() подчиняется следующему синтаксису:

mixed str replace (mixed search, mixed replace, mixed subject)

Функция str_replace() возвращает постоянную строку с измененными символами. Параметр search представляет собой ту часть строки, которую мы будем заменять на новую, указанную в качестве параметра replace. В свою очередь сама строка указывается вместо параметра subject. В результате вместо совокупности символов search, содержащихся в строке subject, получается строка mixed с совокупностью символов, указанных в параметре replace. Приведем пример, характеризующий работу функции str_replace():

<?php

$string = "Мама купила красную шапку";

$strnew = str_replace("красную", "фиолетовую", $string);

echo "Первоначальная строка: " .$string."<br><br>";

echo "Преобразованная строка: ".$strnew."<br><br>";

?>

Результатом данного скрипта будут следующие строки:

Первоначальная строка: Мама купила красную шапку

Преобразованная строка: Мама купила фиолетовую шапку

Отсюда видно, что слово красную функция str_replace() заменила на указанное слово фиолетовую.

Функция str_replace() была добавлена в PHP 3.0.6.

Функция str_replace() работает в РНР3—3.0.6 и РНР 4;substr_replace() — в РНР4—4.0b4; остальные функции — в РНР 3 и РНР 4.

<< Предыдущий параграф Следующий параграф >>
Оглавление