api
2 days ago
background
2 days ago
backups
2 days ago
bulk
2 days ago
cache
2 days ago
cli
2 days ago
external
2 days ago
frontend
2 days ago
integrations
2 days ago
lazy-load
2 days ago
media
2 days ago
media-library
2 days ago
membership
2 days ago
modules
2 days ago
parser
2 days ago
photon
2 days ago
png2jpg
2 days ago
product-analytics
2 days ago
rating-notification
2 days ago
resize
2 days ago
security
2 days ago
smush
2 days ago
srcset
2 days ago
stats
2 days ago
threads
2 days ago
transform
2 days ago
class-abstract-settings-dto.php
2 days ago
class-activity-log-controller.php
2 days ago
class-animated-status-controller.php
2 days ago
class-array-utils.php
2 days ago
class-attachment-id-list.php
2 days ago
class-backup-size.php
2 days ago
class-configs.php
2 days ago
class-controller.php
2 days ago
class-core.php
2 days ago
class-cron-controller.php
2 days ago
class-deprecated-hooks.php
2 days ago
class-error-handler.php
2 days ago
class-file-system.php
2 days ago
class-file-utils.php
2 days ago
class-format-utils.php
2 days ago
class-helper.php
2 days ago
class-hub-connector.php
2 days ago
class-installer.php
2 days ago
class-keyword-exclusions.php
2 days ago
class-modules.php
2 days ago
class-multisite-utils.php
2 days ago
class-optimization-controller.php
2 days ago
class-optimizer.php
2 days ago
class-plugin-settings-watcher.php
2 days ago
class-rest.php
2 days ago
class-server-utils.php
2 days ago
class-settings-controller.php
2 days ago
class-settings-dto.php
2 days ago
class-settings-sanitizer.php
2 days ago
class-settings.php
2 days ago
class-shim.php
2 days ago
class-smush-file.php
2 days ago
class-stats.php
2 days ago
class-string-utils.php
2 days ago
class-time-utils.php
2 days ago
class-timer.php
2 days ago
class-upload-dir.php
2 days ago
class-url-utils.php
2 days ago
class-urls-exclusions.php
2 days ago
class-wp-query-utils.php
2 days ago
wp-compat.php
2 days ago
class-array-utils.php
86 lines
| 1 | <?php |
| 2 | |
| 3 | namespace Smush\Core; |
| 4 | |
| 5 | class Array_Utils { |
| 6 | public function array_hash( $array, $keys = array() ) { |
| 7 | $hash = 0; |
| 8 | if ( is_array( $array ) ) { |
| 9 | foreach ( $array as $key => $value ) { |
| 10 | if ( is_array( $value ) ) { |
| 11 | $value_hash = $this->array_hash( |
| 12 | $value, |
| 13 | array_merge( $keys, array( $key ) ) |
| 14 | ); |
| 15 | } else { |
| 16 | $prefix = join( '~', $keys ); |
| 17 | $value_hash = crc32( $prefix . $value ); |
| 18 | } |
| 19 | |
| 20 | $hash += $value_hash; |
| 21 | } |
| 22 | } |
| 23 | |
| 24 | return $hash; |
| 25 | } |
| 26 | |
| 27 | public function get_array_value( $haystack, $key, $default_value = null ) { |
| 28 | if ( empty( $key ) ) { |
| 29 | return $default_value; |
| 30 | } |
| 31 | |
| 32 | if ( ! is_array( $key ) ) { |
| 33 | $key = array( $key ); |
| 34 | } |
| 35 | |
| 36 | if ( ! is_array( $haystack ) ) { |
| 37 | return $default_value; |
| 38 | } |
| 39 | |
| 40 | $value = $haystack; |
| 41 | foreach ( $key as $key_part ) { |
| 42 | $value = isset( $value[ $key_part ] ) ? $value[ $key_part ] : $default_value; |
| 43 | } |
| 44 | |
| 45 | return $value; |
| 46 | } |
| 47 | |
| 48 | public function put_array_value( &$haystack, $value, $keys ) { |
| 49 | if ( ! is_array( $keys ) ) { |
| 50 | $keys = array( $keys ); |
| 51 | } |
| 52 | |
| 53 | $pointer = &$haystack; |
| 54 | foreach ( $keys as $key ) { |
| 55 | if ( ! isset( $pointer[ $key ] ) ) { |
| 56 | $pointer = empty( $pointer ) ? array() : $pointer; |
| 57 | $pointer[ $key ] = array(); |
| 58 | } |
| 59 | $pointer = &$pointer[ $key ]; |
| 60 | } |
| 61 | $pointer = $value; |
| 62 | } |
| 63 | |
| 64 | public function ensure_array( $array ) { |
| 65 | return empty( $array ) || ! is_array( $array ) |
| 66 | ? array() |
| 67 | : $array; |
| 68 | } |
| 69 | |
| 70 | /** |
| 71 | * WARNING: This trick works only for arrays in which all the values are valid keys. |
| 72 | * @see https://stackoverflow.com/a/8321701 |
| 73 | * |
| 74 | * @param $array scalar[] |
| 75 | * |
| 76 | * @return array Unique array |
| 77 | */ |
| 78 | public function fast_array_unique( $array ) { |
| 79 | if ( ! is_array( $array ) ) { |
| 80 | return array(); |
| 81 | } |
| 82 | |
| 83 | return array_keys( array_flip( $array ) ); |
| 84 | } |
| 85 | } |
| 86 |