PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 16.0-beta
Jetpack – WP Security, Backup, Speed, & Growth v16.0-beta
16.0 16.0-beta 16.0-a.7 16.0-a.5 15.9.1 16.0-a.3 16.0-a.1 15.9 15.9-beta 15.9-a.7 15.9-a.5 15.9-a.3 15.9-a.1 15.8 15.8-beta 15.8-a.7 15.8-a.5 5.2.5 5.3.4 5.4.4 5.5.5 5.6.5 5.7.5 5.8.4 5.9.4 6.0.4 6.1 6.1.1 6.1.2 6.1.3 6.1.4 6.1.5 6.2 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.3 6.3.1 6.3.2 6.3.3 6.3.4 6.3.5 6.3.6 6.3.7 6.4 6.4.1 6.4.2 6.4.3 6.4.4 6.4.5 6.4.6 6.5 6.5.1 6.5.2 6.5.3 6.5.4 6.6 6.6.1 6.6.2 6.6.3 6.6.4 6.6.5 6.7 6.7.1 6.7.2 6.7.3 6.7.4 6.8 6.8.1 6.8.2 6.8.3 6.8.4 6.8.5 6.9 6.9.1 6.9.2 6.9.3 6.9.4 7.0 7.0.1 7.0.2 7.0.3 7.0.4 7.0.5 7.1 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2 7.2.1 7.2.1.1 7.2.2 7.2.3 7.2.4 7.2.5 7.3 7.3.0.1 7.3.1 7.3.1.1 7.3.2 7.3.3 7.3.4 7.3.5 7.4 7.4.1 7.4.2 7.4.3 7.4.4 7.4.5 7.5 7.5.0.1 7.5.1 7.5.2 7.5.3 7.5.4 7.5.5 7.5.6 7.5.7 7.6 7.6.1 7.6.2 7.6.3 7.6.4 7.7 7.7.1 7.7.2 7.7.3 7.7.4 7.7.5 7.7.6 7.8 7.8.1 7.8.2 7.8.3 7.8.4 7.9 7.9.1 7.9.2 7.9.3 7.9.4 8.0 8.0.1 8.0.2 8.0.3 8.1 8.1.1 8.1.2 8.1.3 8.1.4 8.2 8.2.0.1 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.2.6 8.3 8.3.1 8.3.2 8.3.3 8.4 8.4.1 8.4.2 8.4.3 8.4.4 8.4.5 8.5 8.5.1 8.5.2 8.5.3 8.6 8.6.1 8.6.2 8.6.3 8.6.4 8.7 8.7.0.1 8.7.1 8.7.2 8.7.3 8.7.4 8.8 8.8.1 8.8.2 8.8.3 8.8.4 8.8.5 8.9 8.9.1 8.9.2 8.9.3 8.9.4 9.0 9.0.1 9.0.2 9.0.3 9.0.4 9.0.5 9.1 9.1.1 9.1.2 9.1.3 9.2 9.2.1 9.2.2 9.2.3 9.2.4 9.3 9.3.1 9.3.2 9.3.3 9.3.4 9.3.5 9.4 9.4.1 9.4.2 9.4.3 9.4.4 9.5 9.5.1 9.5.2 9.5.3 9.5.4 9.5.5 9.6 9.6.1 9.6.2 9.6.3 9.6.4 9.7 9.7.1 9.7.2 15.7-beta.2 9.7.3 15.7.1 9.8 15.8-a.1 9.8.1 15.8-a.3 9.8.2 2.0.9 9.8.3 2.1.7 9.9 2.2.10 9.9.1 2.3.10 9.9.2 2.4.7 9.9.3 2.5.5 2.6.6 2.7.5 2.8.5 2.9.6 3.0.6 3.1.5 3.2.5 3.3.6 3.4.6 3.5.6 3.6.4 3.7.5 3.8.5 3.9.10 4.0.7 4.1.4 4.2.5 4.3.5 4.4.5 4.5.3 4.6.3 4.7.4 4.8.5 4.9.3 5.0.3 5.1.4 trunk 10.0 10.0.1 10.0.2 10.1 10.1.1 10.1.2 10.2 10.2.1 10.2.2 10.2.3 10.3 10.3.1 10.3.2 10.4 10.4.1 10.4.2 10.5 10.5.1 10.5.2 10.5.3 10.6 10.6.1 10.6.2 10.7 10.7.1 10.7.2 10.8 10.8.1 10.8.2 10.9 10.9.1 10.9.2 10.9.3 11.0 11.0.1 11.0.2 11.1 11.1.1 11.1.2 11.1.3 11.1.4 11.2 11.2.1 11.2.2 11.3 11.3.1 11.3.2 11.3.3 11.3.4 11.4 11.4.1 11.4.2 11.5 11.5.1 11.5.2 11.5.3 11.6 11.6.1 11.6.2 11.7 11.7.1 11.7.2 11.7.3 11.8 11.8.3 11.8.4 11.8.5 11.8.6 11.9 11.9.1 11.9.2 11.9.3 12.0 12.0.1 12.0.2 12.1 12.1.1 12.1.2 12.2 12.2.1 12.2.2 12.3 12.3.1 12.4 12.4.1 12.5 12.5.1 12.6 12.6.1 12.6.2 12.6.3 12.7 12.7.1 12.7.2 12.8 12.8.1 12.8.2 12.9 12.9.1 12.9.2 12.9.3 12.9.4 13.0 13.0.1 13.1 13.1.1 13.1.2 13.1.3 13.1.4 13.2 13.2.1 13.2.2 13.2.3 13.3 13.3.1 13.3.2 13.4 13.4.1 13.4.2 13.4.3 13.4.4 13.5 13.5.1 13.6 13.6.1 13.7 13.7.1 13.8 13.8.1 13.8.2 13.9 13.9.1 14.0 14.1 14.2 14.2.1 14.3 14.4 14.4.1 14.5 14.6 14.7 14.8 14.9 14.9.1 15.0 15.0.1 15.0.2 15.1 15.1.1 15.2 15.3 15.3.1 15.4 15.5 15.6 15.7 15.7-a.1 15.7-a.3 15.7-a.5 15.7-a.7 15.7-beta
jetpack / modules / tiled-gallery / math / class-constrained-array-rounding.php
jetpack / modules / tiled-gallery / math Last commit date
class-constrained-array-rounding.php 2 years ago
class-constrained-array-rounding.php
109 lines
1 <?php // phpcs:ignore WordPress.Files.FileName.InvalidClassFileName
2
3 /**
4 * Lets you round the numeric elements of an array to integers while preserving their sum.
5 *
6 * Usage:
7 *
8 * Jetpack_Constrained_Array_Rounding::get_rounded_constrained_array( $bound_array )
9 * if a specific sum doesn't need to be specified for the bound array
10 *
11 * Jetpack_Constrained_Array_Rounding::get_rounded_constrained_array( $bound_array, $sum )
12 * If the sum of $bound_array must equal $sum after rounding.
13 *
14 * If $sum is less than the sum of the floor of the elements of the array, the class defaults to using the sum of the array elements.
15 */
16 class Jetpack_Constrained_Array_Rounding {
17 /**
18 * Get the rounded constrained array.
19 *
20 * @param array $bound_array - the array we're rounding.
21 * @param int $sum - the sum of the array.
22 *
23 * @return array
24 */
25 public static function get_rounded_constrained_array( $bound_array, $sum = false ) {
26 // Convert associative arrays before working with them and convert them back before returning the values
27 $keys = array_keys( $bound_array );
28 $bound_array = array_values( $bound_array );
29
30 $bound_array_int = self::get_int_floor_array( $bound_array );
31
32 $lower_sum = array_sum( wp_list_pluck( $bound_array_int, 'floor' ) );
33 if ( ! $sum || ( $sum < $lower_sum ) ) {
34 // If value of sum is not supplied or is invalid, calculate the sum that the returned array is constrained to match
35 $sum = array_sum( $bound_array );
36 }
37 $diff_sum = $sum - $lower_sum;
38
39 self::adjust_constrained_array( $bound_array_int, $diff_sum );
40
41 $bound_array_fin = wp_list_pluck( $bound_array_int, 'floor' );
42 return array_combine( $keys, $bound_array_fin );
43 }
44
45 /**
46 * Get int floor of array values.
47 *
48 * @param array $bound_array - the array we're getting floor values for.
49 *
50 * @return array
51 */
52 private static function get_int_floor_array( $bound_array ) {
53 $bound_array_int_floor = array();
54 foreach ( $bound_array as $i => $value ) {
55 $bound_array_int_floor[ $i ] = array(
56 'floor' => (int) floor( $value ),
57 'fraction' => $value - floor( $value ),
58 'index' => $i,
59 );
60 }
61
62 return $bound_array_int_floor;
63 }
64
65 /**
66 * Adjust the constrained array.
67 *
68 * @param array $bound_array_int - the array we're adjusting.
69 * @param int $adjustment - how much we're adjusting the array.
70 */
71 private static function adjust_constrained_array( &$bound_array_int, $adjustment ) {
72 usort( $bound_array_int, array( self::class, 'cmp_desc_fraction' ) );
73
74 $start = 0;
75 $end = $adjustment - 1;
76 $length = count( $bound_array_int );
77
78 for ( $i = $start; $i <= $end; $i++ ) {
79 ++$bound_array_int[ $i % $length ]['floor'];
80 }
81
82 usort( $bound_array_int, array( self::class, 'cmp_asc_index' ) );
83 }
84
85 /**
86 * Compare fraction values of two arrays.
87 *
88 * @param array $a - the first array we're comparing.
89 * @param array $b - the second array we're comparing.
90 *
91 * @return int
92 */
93 private static function cmp_desc_fraction( $a, $b ) {
94 return $b['fraction'] <=> $a['fraction'];
95 }
96
97 /**
98 * Compare index values of two arrays.
99 *
100 * @param array $a - the first array.
101 * @param array $b - the second array.
102 *
103 * @return int
104 */
105 private static function cmp_asc_index( $a, $b ) {
106 return $a['index'] <=> $b['index'];
107 }
108 }
109