Функция usortO помогает писать собственные функции сортировки, array - это сортируемый массив, a cmp_functior - имя функции, посредством которой надо сравнивать два элемента массива. Нам требуется написать только функцию сортировки, а собственно сортировку символов выполнит РНР.
Функция сравнения должна принимать два аргумента и возвращать целое число - отрицательное, ноль или положительное, если первый аргумент соответственно меньше второго, равен ему или больше него.
В качестве функции сравнения можно взять встроенную функцию РНР или написать свою. Используя st гс-о 11 (), мы устанавливаем правильную локаль, а затем вызываем usort():
setlocale(LC_TIME, 'da_DK'); usort($array,
Функция включена в РНР с версии 4.0.5. Ее достоинство в том, что
она учитывает все, что системной локали известно о языке. Следовательно, она знает и о тех по которым два символа должны сортироваться
как один самостоятельный.
Пользовательская функция сравнения
Функция О доступна в РНР начиная с версии 4.0.5, но мы можем на
писать собственную функцию сравнения.
Наша функция будет правильно сортировать три специальных символа датского языка. Функция не будет рассматривать как «а», потому что это слишком усложнило бы ее и лишило поучительности. Функция начинает работу, проверяя, действительно ли оба аргумента являются строками. Если это не так, сравниваем аргументы, как это сделал бы РНР, если бы мы вызывали функцию
function daCmp($a, $b)
.
Числа и т. */ if (!is_string($a) [i lis string($b)) {
if ($a < $b) {
return } elseif ($a == $b) { return 0;
} else return
}
При сортировке символов датского языка мы не делаем различия между буквами верхнего и нижнего регистров, поэтому преобразуем обе строки к нижнему регистру и сравним их:
$а = strtolower($a); $b = strtolower(Sb);
// Равные элементы, if ($a == $b) return 0;
Затем мы просматриваем строки, пока не найдем в них два отличающихся символа. Результат сравнения этих двух символов определит порядок двух элементов в массиве. Счетчик $i указывает на место, в котором различаются строки, поэтому сравнивать надо $a[$i] и $b[$i]:
$i = 0;
while($a[$i] == $b[$i]) {
J
Последняя буква «ж» нужна для того, чтобы поймать «ж». Если ее опустить, strrpos() возвратит 0, что неверно, даже если буква найдена:
$speciai_chars = 'геоёээ';
Двумерный массив, который следует далее, используется для выяснения относительного порядка специальных символов. Во внешнем массиве есть элементы для каждого специального символа. Это символ, находящийся в первом аргументе, $а. Каждый элемент является массивом, содержащим те же самые специальные символы. Этот внутренний массив - символ, находящийся во втором аргументе, $Ь.