функция since 3.1.0

wp_find_hierarchy_loop_tortoise_hare()

Проверено на WordPress 6.9, обновлено Источник: WordPress Developer Resources.

Сигнатура

wp_find_hierarchy_loop_tortoise_hare( callable $callback, int $start, array $override = array(), array $callback_args = array(), bool $_return_loop = false ): mixed

Описание

На каждом шаге алгоритма заяц делает два шага, а черепаха — один.
Если заяц когда-либо обгоняет черепаху, значит есть цикл.

Оригинал (английский)

For every step of the algorithm, the hare takes two steps and the tortoise one.
If the hare ever laps the tortoise, there must be a loop.

Параметры

$callback callable обязательный
Функция, которая принимает ( ID, callback_arg, … ) и возвращает parent_ID.
$start int обязательный
Идентификатор, с которого начинается проверка на циклы.
$override array необязательный = array()
Массив ( ID => parent_ID, … ), используемый вместо $callback.
$callback_args array необязательный = array()
Дополнительные аргументы, передаваемые в $callback.
$_return_loop bool необязательный = false
Возвращать участников цикла или только определять его наличие? Устанавливайте true только если вы уже знаете, что заданный $start входит в цикл (иначе возвращаемый массив может включать ответвления).

Возвращаемое значение

mixed

Исходный код

wp-includes/functions.php:7152

function wp_find_hierarchy_loop_tortoise_hare( $callback, $start, $override = array(), $callback_args = array(), $_return_loop = false ) {
	$tortoise        = $start;
	$hare            = $start;
	$evanescent_hare = $start;
	$return          = array();

	// Set evanescent_hare to one past hare. Increment hare two steps.
	while (
		$tortoise
	&&
		( $evanescent_hare = $override[ $hare ] ?? call_user_func_array( $callback, array_merge( array( $hare ), $callback_args ) ) )
	&&
		( $hare = $override[ $evanescent_hare ] ?? call_user_func_array( $callback, array_merge( array( $evanescent_hare ), $callback_args ) ) )
	) {
		if ( $_return_loop ) {
			$return[ $tortoise ]        = true;
			$return[ $evanescent_hare ] = true;
			$return[ $hare ]            = true;
		}

		// Tortoise got lapped - must be a loop.
		if ( $tortoise === $evanescent_hare || $tortoise === $hare ) {
			return $_return_loop ? $return : $tortoise;
		}

		// Increment tortoise by one step.
		$tortoise = $override[ $tortoise ] ?? call_user_func_array( $callback, array_merge( array( $tortoise ), $callback_args ) );
	}

	return false;
}

История изменений

ВерсияОписание
3.1.0 Introduced.

Что будем искать? Например,Продвижение

Этот сайт использует куки-файлы. Оставаясь на сайте, Вы соглашаетесь на их использование. Для получения дополнительной информации, пожалуйста, ознакомьтесь с политикой в отношении персональных данных.