rest_stabilize_value()
Уніфікує (стандартизує) передане значення відповідно до семантики JSON схеми.
Завдання цієї функції перевірити значення та якщо потрібно обробити його так, щоб привести до єдиного вигляду. Потрібно це для того, щоб потім можна було порівняти значення.
Наприклад, у нас є два однакові асоціативні масиви. Відрізняються вони лише різним розташуванням елементів. Щоб їх порівняти і переконатися, що вони однакові, потрібно використовувати цю функцію. Приклад 2 .
Алгоритм роботи функції:
- Якщо передано скаляр чи null ( is_scalar() , is_null() ), він не обробляється і повертається як є.
- Якщо передано об’єкт, він також не обробляється і повертається як є. Але при цьому спрацьовує функція _doing_it_wrong() з повідомленням Cannot stabilize objects. Convert the object to an array first.». Тобто. об’єкти у функцію передавати неправильно.
- Якщо переданий масив, він і всі вкладені масиви рекурсивно сортується за ключами (див. ksort() ) і відсортований (уніфікований) масив повертається назад.
Хуків немає.
Повертає
Разное
. Передане значення уніфікованому (стандартному) вигляді.
Використання
rest_stabilize_value( $value );
-
$value
(змішаний) (обов’язковий) Значення уніфікації. Має бути очищеним .
Об’єкт передавати не можна – він не обробляється. Об’єкт перед передачею необхідно перетворити на масив.
Приклади
#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 ) ) ) */
#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() rest stabilize value WP 6.0.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; }