ТОП-10 популярных



Для работы с вещественными числами в MySQL предусмотрено три типа данных - это типы FLOAT, DOUBLE, DECIMAL. Числовой тип FLOAT...

НОУТБУК с блестящим экраном
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...

БОЛЬШЕ БОЛЬШИХ LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...

Больше больших LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...

Магнито-оптический дисковод DynaMO
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...

Иди и пиши. TravelMate C100
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...

ПОД ЛИТЕРОЙ «N»
Aтаку LCD-мониторов не остановить, а масштабы этого наступления даже немного пугают. Судите сами — многие пользователи только начинают приглядываться к новому для...


Для длинных строк, т.е. строк длиннее 255 символов, в MySQL предусмотрены типы BLOB (Binary Large Object, большой двоичный объект) и...

Размер объему не помеха.
С тех пор как компания Fujitsu отказалась от производства жестких дисков для настольных компьютеров, многие пользователи начали забывать о том,...


Какую только информацию мы не помещаем на компакт-диски: резервные копии важных данных, музыку, фильмы... Многие полагают, что главное - «купить...

PHP. Сортировка, поиск и случайные числа. Часть Третья.


19-05-2015

И, наконец, последняя функция, которая описывается в данном разделе, - это ksort. Данная функция позволяет сортировать массив по значениям индексов. Внесем изменения в листинг 21.3, чтобы вместо функции arsort воспользоваться функцией ksort. Заметим, что теперь все элементы массива будут располагаться в порядке следования индексов или ключей.
Функция ksort, вероятно, наиболее полезна в случаях, когда в распоряжении разработчика имеется ассоциативный массив, и у него нет полного контроля над содержимым массива. В листинге 21.4 сценарий получает массив, созданный функцией getdate. Если запустить его с закомментированной строкой ksort, вы сможете убедиться в том, что порядок следования элементов является произвольным. Это порядок, выбранный при создании функции. Здесь можно распечатать пару строк для каждого элемента, приведенного в описании функции getdate (см. главу 14, "Функции даты и времени"). Более читаемым решением является сортировка элементов по ключам и распечатка их в цикле. Как нетрудно догадаться, функция krsort сортирует массив по индексам в обратном порядке.

| Листинг 21.4. Использование функции ksort_
<?php
//Получить массив от функции getdate $today = getdate();
// Отсортировать массив, сохраняя индексы ksort($today);
//Распечатать массив, отсортированный по ключам
print("<pre>");
print_r($today);*
print("</pre>n");
?> 
21.3. Сортировка с помощью функций сравнения
Встроенные функции сортировки соответствуют большинству задач. Но если для выполнения поставленной задачи требуется процедура сортировки, обладающая более совершенными характеристиками, чем те, которые предлагают встроенные функции, разработчик может запрограммировать свои собственные функции. Если для решения задачи требуется сравнить такие сложные элементы, как объекты или многомерные массивы, решение можно найти в написании функции сравнения и включения ее в функцию usort.
Функция usort позволяет отсортировать массив с помощью функции сравнения, разработанной программистом. Такая функция сравнения должна принимать два значения и возвращать целое число. Значения двух аргументов сравниваются, и если возвращается отрицательное число, то значения считаются упорядоченными. При возвращении нуля значения считаются равными. Положительное значение означает, что порядок значений нарушен.
В листинге 21.5 автором создан многомерный массив с тремя элементами, соот­ветствующим имени, должности и почасовой ставке. Это сделано для того, чтобы иметь возможность перечислять работников по именам, но иногда может потребоваться сравнить их по должностям или по заработной плате. Для решения этой проблемы автором были созданы три функции сравнения. Результат работы сценария показан на рис. 21.4.

Листинг 21.5. Использование функции usort

<?php
class EmployeeTracker
{
static $title = array( "President"=>1, "Executive"=>2, "Manager"=>3, "Programmer"=>4
);
public $employees;
public function __construct($data)
{
$this->employees = $data;
}
// byName
// сравнение служащих по именам function byName($left, $right)
{
return(strcmp($left[0], $right[0]));
}
// byTitle
// сравнение служащих по должностям function byTitle($left, $right)
{
if($left[1] == $right[1])
{
return(0); 
}
else
{
return(EmployeeTracker::$title[$left[1]] -EmployeeTracker::$title[$right[1]]);
}
}
// bySalary
// сравнение служащих сначала по зарплате, а затем по именам function bySalary($left, $right)
{
if($left[2] == $right[2])
{
return(byName($left, $right));
}
else
{
return($right[2] - $left[2]);
}
}
// printEmployees
// отправить полный список служащих в браузер function printEmployees()
{
foreach($this->employees as $value)
{
printf("%s (%s) %.2f/Hour <br>n", $value[0], $value[1], $value[2]);
}
}
}
// Создать список служащих (имя, должность, ставка) $e = new EmployeeTracker(array(
array("Mckillop, Jeff", "Executive", 50),
array("Porter, Carl", "Manager", 45),
array("Marazzani, Rick", "Manager", 35),
array("Dibetta, Bob", "Programmer", 65),
array("Atkinson, Leon", "President", 100))); print("<b>Не отсортированьк/bxbr^n"),-$e->printEmployees();
print("<B>Отсортированы по имени</B><br>n"),•
usort($e->employees, array($e, "byName")); $e->printEmployees();
print("<b> Отсортированы по должности</Ь><Ьг>п"); usort($e->employees, array($e, "byTitle")); $e->printEmployees();
print("<b> Отсортированы по ставке</b><br>n"),• usort($e->employees, array($e, "bySalary")); $e->printEmployees();
?>
Сортировка, поиск и случайные числа
Функция byName использует функцию strcmp. Имена сортируются по ASCII-кодам. Функция byTitle присваивает целое значение каждой должности и возвращает результат сравнения этих целых чисел. Функция bySalary сравнивает элемент, хранящий зарплату, но если зарплаты двух служащих равны, то сравниваются их имена.

Понравился материал? Поделитесь с друзьями!



<< Предыдущая статьяСледующая статья >>
PHP. Сортировка, поиск и случайные числа. Часть Вторая. PHP. Сортировка, поиск и случайные числа. Часть Четвёртая.