/** * 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); }