Если бы Вы хотите, чтобы Регистратор был на экземпляр тогда, да, Вы хотели бы сделать его переходным процессом, если Вы собираетесь сериализировать свои объекты. Регистраторы Log4J не являются сериализуемыми, не в версии Log4J, который я использую так или иначе, поэтому если Вы не сделаете свой переходный процесс полей Logger, то Вы получите исключения на сериализации.
Чтобы отсортировать что-либо, вам нужны средства для сравнения двух элементов и выяснения, идет ли один из них перед другим. Это то, что вы поставляете usort. Эта функция будет передавать два элемента из вашего входного массива и возвращает порядок, в котором они должны быть.
Если у вас есть средства для сравнения двух элементов, вы можете использовать алгоритм сортировки по вашему выбору .
Если вы не знакомы, вы могли бы посмотреть, как простой наивный алгоритм, такой как bubbleort , будет использовать функцию сравнения.
За кулисами PHP использует быстрая сортировка .
Точное определение $ a и $ b будет зависеть от алгоритма, используемого для сортировки массива. Чтобы отсортировать что-либо, у вас должны быть средства для сравнения двух элементов, для чего используется функция обратного вызова. Некоторые алгоритмы сортировки могут запускаться в любом месте массива, другие могут запускаться только в определенной его части, поэтому нет фиксированного значения в $ a и $ b, кроме того, что они являются двумя элементами в массиве, которые должны быть по сравнению с текущим алгоритмом.
Этот метод можно использовать, чтобы пролить свет на алгоритм, который использует PHP.
<?php
$myArray = array(1, 19, 18, 12, 56);
function compare($a, $b) {
echo "Comparing $a to $b\n";
if ($a == $b) return 0;
return ($a < $b) ? -1 : 1;
}
usort($myArray,"compare");
print_r($myArray);
?>
Выходные данные
vinko@mithril:~$ php sort.php
Comparing 18 to 19
Comparing 56 to 18
Comparing 12 to 18
Comparing 1 to 18
Comparing 12 to 1
Comparing 56 to 19
Array
(
[0] => 1
[1] => 12
[2] => 18
[3] => 19
[4] => 56
)
Из выходных данных и взглянув на источник мы видим, что используемая сортировка действительно является реализацией quicksort , проверьте Zend / zend_qsort.c в исходном коде PHP (связанная с версией немного устарела, но не сильно изменилась).
Он выбирает точку поворота в середине массива, в данном случае 18, затем необходимо переупорядочить список так, чтобы все элементы, которые меньше (в соответствии с используемой функцией сравнения), чем точка поворота, располагались перед точкой поворота и так что все элементы, большие, чем точка поворота, идут после него, мы можем увидеть это, когда сначала сравнивает все с 18.
Некоторые дополнительные пояснения в виде схем.
Step 0: (1,19,18,12,56); //Pivot: 18, Step 1: (1,12,18,19,56); //After the first reordering Step 2a: (1,12); //Recursively do the same with the lesser, here //pivot's 12, and that's what it compares next if //you check the output. Step 2b: (19,56); //and do the same with the greater