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.8
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; }