Data.php (3172B)
1 <?php 2 3 namespace Finwo\Debug; 4 5 class Data 6 { 7 /** 8 * @param mixed $input 9 * 10 * @return array 11 */ 12 static function x2array($input, $depth = -1) 13 { 14 if ($depth === 0) { 15 return 'Too deep'; 16 } 17 $output = $input; 18 switch (gettype($output)) { 19 case 'object': 20 if (method_exists($output,'toArray')) { 21 $output = $output->toArray(); 22 } else { 23 $a = (array)$input; 24 $b = get_object_vars($input); 25 $output = (count($a)>count($b))?$a:$b; 26 } 27 case 'array': 28 foreach ($output as $key => $value) { 29 $output[$key] = self::x2array($value, $depth-1); 30 } 31 default: 32 return $output; 33 break; 34 } 35 } 36 37 /** 38 * @param string $path 39 * @param array|object $data 40 * @param string|null $default 41 * 42 * @return mixed 43 */ 44 public static function sget($path, $data, $default = null) 45 { 46 // Fetch required variables 47 $data = self::x2array($data); 48 $keys = explode('.',$path); 49 50 // Follow the keys 51 foreach ($keys as $key) { 52 if (!isset($data[$key])) return $default; 53 $data = $data[$key]; 54 } 55 56 // Return the data we've found 57 return $data; 58 } 59 60 /** 61 * Returns true if at least one of the values is true-like 62 * 63 * @param array $permissions 64 * @param array $data 65 * 66 * @return bool 67 */ 68 public static function sHasOne(array $permissions, $data) 69 { 70 foreach ($permissions as $permission) { 71 if (self::sget($permission, $data)) return true; 72 } 73 return false; 74 } 75 76 /** 77 * @param string $path 78 * @param object|null $data 79 * @param string|null $default 80 * 81 * @return mixed 82 */ 83 protected function get($path, $data = null, $default = null) 84 { 85 // Allow inserting data, default to $this 86 if (is_null($data)) { 87 $data = self::x2array(get_object_vars($this)); 88 } else { 89 $data = self::x2array($data); 90 } 91 92 return self::sget($path, $data, $default); 93 } 94 95 /** 96 * @param array $numbers 97 * 98 * @return float|int 99 */ 100 public static function sum( $numbers = array() ) 101 { 102 $total = 0; 103 foreach ($numbers as $number) { 104 $total += floatval($number); 105 } 106 return $total; 107 } 108 109 /** 110 * @param array $numbers 111 * 112 * @return float|int 113 */ 114 public static function avg( $numbers = array() ) 115 { 116 $count = count($numbers); 117 if (!$count) { 118 return 0; 119 } 120 return self::sum($numbers) / count($numbers); 121 } 122 123 /** 124 * @param array $strings 125 * 126 * @return int 127 */ 128 public static function maxLength( $strings = array() ) 129 { 130 $length = 0; 131 foreach ($strings as $string) { 132 $length = max(strlen($string),$length); 133 } 134 return $length; 135 } 136 }