Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
5 / 5
CRAP
100.00% covered (success)
100.00%
24 / 24
ArrayHelper
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
5 / 5
19
100.00% covered (success)
100.00%
24 / 24
 getArrayMaxDimensions
100.00% covered (success)
100.00%
1 / 1
3
100.00% covered (success)
100.00%
5 / 5
 isAtomic
100.00% covered (success)
100.00%
1 / 1
4
100.00% covered (success)
100.00%
1 / 1
 arrayIsOneDimensionalAtomic
100.00% covered (success)
100.00%
1 / 1
3
100.00% covered (success)
100.00%
4 / 4
 arrayIsTwoDimensionalAtomic
100.00% covered (success)
100.00%
1 / 1
4
100.00% covered (success)
100.00%
4 / 4
 arrayIsTwoDimensionalAtomicSquare
100.00% covered (success)
100.00%
1 / 1
5
100.00% covered (success)
100.00%
10 / 10
<?php
namespace pvc\helpers;
/**
 *
 * @class ArrayHelper.  Provides a set of helper utilities to be able to inspect and manipulate arrays beyond
 * the core functions provided with php
 *
 */
class ArrayHelper
{
    /**
     * @function getArrayMaxDimensions integer.  Returns the largest number of dimensions of an array.
     * @param array $array.  Array to be tested.
     *
     * There's really no efficient way to do this and be sure you are correct - you must inspect all elements
     * in the array.  So for large arrays this function will take some time to execute.
     * @return int
     */
    public static function getArrayMaxDimensions(array $array) : int
    {
        $n[] = 1;
        foreach ($array as $arrayElement) {
            if (is_array($arrayElement)) {
                $n[] = 1 + self::getArrayMaxDimensions($arrayElement);
            }
        }
        return max($n);
    }
    /**
     * isAtomic
     * @param mixed $x
     * @return bool
     */
    protected static function isAtomic($x) : bool
    {
        return (is_integer($x) || is_float($x) || is_string($x) || is_bool($x));
    }
    /**
     * @function arrayIsOneDimensionalAtomic boolean.  Returns true if each element of the array is 'atomic' in nature.
     * 'Atomic' means must be of type integer, float, string or boolean.
     *
     * $var array array.  Array to be tested.
     * @param array $array
     * @return bool
     */
    public static function arrayIsOneDimensionalAtomic(array $array)
    {
        foreach ($array as $arrayElement) {
            if (!self::isAtomic($arrayElement)) {
                return false;
            }
        }
        return true;
    }
    /**
     * @function arrayIsTwoDimensionalAtomic boolean.  Returns true if each element of the array is a one dimensional
     * atomic array
     * @param array $array
     *
     * $var array array.  Array to be tested.
     * @return bool
     */
    public static function arrayIsTwoDimensionalAtomic(array $array): bool
    {
        foreach ($array as $arrayElement) {
            if (!is_array($arrayElement) || !self::arrayIsOneDimensionalAtomic($arrayElement)) {
                return false;
            }
        }
        return true;
    }
    /**
     * @function arrayIsTwoDimensionalAtomic boolean.  Returns true if each element of the array is a one
     * dimensional atomic array
     * @param array $array
     *
     * $var array array.  Array to be tested.
     * @return bool
     */
    public static function arrayIsTwoDimensionalAtomicSquare(array $array): bool
    {
        $firstElement = $array[0];
        if (!is_array($firstElement)) {
            return false;
        }
        $arrayWidth = count($firstElement);
        foreach ($array as $arrayElement) {
            if (!self::arrayIsOneDimensionalAtomic($arrayElement)) {
                return false;
            }
            if ($arrayWidth != count($arrayElement)) {
                return false;
            }
        }
        return true;
    }
}