Example #1
0
File: arr.php Project: amekusa/plz
 /**
  * Returns the number of elements in `$X`
  *
  * Additionally:
  *
  * + If `$X` is uncountable, `1` is returned.
  * + If `$X` is `null`, `0` is returned.
  *
  * @example Demonstration
  * ```php
  * $var1 = array ('A', 'B');                       // Array
  * $var2 = new ArrayObject(array ('A', 'B', 'C')); // Countable object
  * $var3 = 'ABCD';                                 // String
  * $var4 = null;                                   // Null
  * var_dump( arr::count($var1) );
  * var_dump( arr::count($var2) );
  * var_dump( arr::count($var3) );
  * var_dump( arr::count($var4) );
  * ```
  * @example Recursively counting
  * ```php
  * $var = array (
  *   'A', 'B',
  *   array ('C', 'D'),
  *   'E', 'F'
  * );
  * var_dump( arr::count($var)       ); // Normal
  * var_dump( arr::count($var, true) ); // Recursive
  * ```
  * @param array|object $X An array, countable object, or iterable object
  * @param boolean $Recursive *(optional)* Whether or not to count recursively
  * @return integer
  */
 static function count($X, $Recursive = false)
 {
     if (is_object($X)) {
         if (!$X instanceof \Countable) {
             if ($X instanceof \Traversable) {
                 // Computes
                 $r = 0;
                 if ($Recursive) {
                     foreach ($X as $iX) {
                         $r += 1 + arr::count($iX, true);
                     }
                 } else {
                     foreach ($X as $iX) {
                         $r++;
                     }
                 }
                 return $r;
             }
         }
     }
     return \count($X, $Recursive ? COUNT_RECURSIVE : COUNT_NORMAL);
 }