rest_stabilize_value()WP 5.5.0

Унифицирует (стандартизирует) переданное значение в соответствии с семантикой JSON схемы.

Задача этой функции проверить значение и если нужно обработать его так, чтобы привести к единому виду. Нужно это для того, чтобы затем можно было сравнить значения.

Например, у нас есть два одинаковых ассоциативных массива. Отличаются они лишь разным расположением элементов. Чтобы их сравнить и убедиться что они одинаковые нужно использовать эту функцию. См. пример 2.

Алгоритм работы функции:

  1. Если передан скаляр или null (is_scalar(), is_null()), то он не обрабатывается и возвращается как есть.
  2. Если передан объект, то он также не обрабатывается и возвращается как есть. Но при этом срабатывает функция _doing_it_wrong() с сообщением «Cannot stabilize objects. Convert the object to an array first.». Т.е. объекты в функцию передавать неправильно.
  3. Если передан массив, то он и все вложенные массивы рекурсивно сортируется по ключам (см. ksort()) и новый отсортированный (унифицированный) массив возвращается обратно.

Хуков нет.

Возвращает

Разное. Переданное значение в унифицированном (стандартном) виде.

Использование

rest_stabilize_value( $value );
$value(смешанный) (обязательный)

Значение для унификации. Должно быть очищенным.

Объект передавать нельзя - он не обрабатывается. Объект перед передачей нужно превратить в массив.

Примеры

0

#1 Демонстрация работы функции:

$fruits = [
	'd' => 'lemon',
	'a' => 'orange',
	'b' => 'banana',
	'c' => 'apple',
];

rest_stabilize_value( $fruits );

/* вернёт
Array (
	[a] => orange
	[b] => banana
	[c] => apple
	[d] => lemon
)
*/
$list = [
	'fruits'     => [
		'lemon' => [
			5 => 'yellow',
			3 => 'sour',
		],
		'apple' => [
			'yellow',
			'red',
			'green',
		],
	],
	'vegetables' => [
		'potato' => [
			'ripe' => true,
			'gmos' => false,
		],
	],
];

rest_stabilize_value( $list );

/* вернёт
Array (
	[fruits] => Array (
		[apple] => Array (
			[0] => yellow
			[1] => red
			[2] => green
		)
		[lemon] => Array (
			[3] => sour
			[5] => yellow
		)
	)
	[vegetables] => Array (
		[potato] => Array (
			[gmos] => false
			[ripe] => true
		 )
	)
)
*/
0

#2 Сравнение двух массивов: {#ex2}

$array1 = [
	'one' => 'один',
	'two' => 'два',
	'three' => 'три',
];

$array2 = [
	'two' => 'два',
	'one' => 'один',
	'three' => 'три',
];

var_dump( $array1 === $array2 ); // false

var_dump( rest_stabilize_value( $array1 ) === rest_stabilize_value( $array2 ) ); // true

Список изменений

С версии 5.5.0 Введена.

Код rest_stabilize_value() WP 6.5.2

function rest_stabilize_value( $value ) {
	if ( is_scalar( $value ) || is_null( $value ) ) {
		return $value;
	}

	if ( is_object( $value ) ) {
		_doing_it_wrong( __FUNCTION__, __( 'Cannot stabilize objects. Convert the object to an array first.' ), '5.5.0' );

		return $value;
	}

	ksort( $value );

	foreach ( $value as $k => $v ) {
		$value[ $k ] = rest_stabilize_value( $v );
	}

	return $value;
}