debug.php

Basic debug utilities
git clone git://git.finwo.net/lib/debug.php
Log | Files | Refs

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 }