Можно ли увидеть этапы сортировки массива с помощью usort с помощью написанного PHP-кода?

Скажем, любой массив, но он может применяться только к этому куску кода. Основываясь на информации отсюда, я знаю, что если в массиве есть 6-15 элементов, используемый алгоритм сортировки будет Сортировка вставкой, а для другого количества элементов это будет Быстрая сортировка:

https://github.com/php/php-src/blob/eac0bf11e4e97916e9688b18e6d62572e12e129f/Zend/zend_sort.c#L176

<?php
function testing($a,$b){
if ($a < $b ){
return -1;
}
elseif ($a > $b){
return 1;
}
//else {
//return 0;
//}
}

$array = array(1,3,2,4,5);
usort($array, "testing");
var_dump($array);
?>

Люди говорили, что я переосмысливаю это и что это не нужно, но наблюдение за каждым этапом сортировки массива было бы лучшим представлением того, как работает алгоритм (это не так просто выяснить из $ a- $ б пары, которые я могу вывести с эхо или что-то в этом роде). var_dump не покажет мне этапы сортировки массива, он всегда будет одинаковым.

Опять же, это единственная цель этого вопроса — добиться доступа к просмотру этапов сортировки (любого / любого) массива.

Кто-то предложил что-то подобное, но я не смог понять это, возможно, это не выполнимо:

«Вы можете попробовать с анонимной функцией, ссылающейся на массив (usort ($ arr, function ($ a, $ b) use ($ arr) {…})), и выводить массив на каждом этапе пути тоже … I ‘ Я не уверен, будет ли результат отражен немедленно или нет «.

Благодарю.

-1

Решение

Нет, это невозможно.

Копия входного массива создается в usort, поэтому вы не сможете наблюдать за тем, что он делает, с помощью PHP-кода.

Смотрите в PHP исходный код для usort:

/* Copy array, so the in-place modifications will not be visible to the callback function */
arr = zend_array_dup(arr);
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]