Last active
December 10, 2015 02:58
-
-
Save iNamik/4371069 to your computer and use it in GitHub Desktop.
I Present several PHP functions for determining if an array is 'scalar', with differing levels of strictness.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* Since PHP stores all arrays as associative internally, there is no proper | |
* definition of a scalar array. | |
* | |
* As such, developers are likely to have varying definitions of scalar array, | |
* based on their application needs. | |
* | |
* In this file, I present 3 increasingly strict methods of determining if an | |
* array is scalar. I feel these methods cover the majority, if not all, of the | |
* use cases where a developer would wish to determine the scalar-ness of an array. | |
* | |
* @author David Farrell <[email protected]> | |
*/ | |
/** | |
* isArrayWithOnlyIntKeys defines a scalar array as containing | |
* only integer keys. | |
* | |
* If you are explicitly setting integer keys on an array, you | |
* may need this function to determine scalar-ness. | |
* | |
* @param array $a | |
* @return boolean | |
*/ | |
function isArrayWithOnlyIntKeys(array $a) | |
{ | |
if (!is_array($a)) | |
return false; | |
foreach ($a as $k => $v) | |
if (!is_int($k)) | |
return false; | |
return true; | |
} | |
/** | |
* isArrayWithOnlyAscendingIntKeys defines a scalar array as | |
* containing only integer keys in ascending (but not necessarily | |
* sequential) order. | |
* | |
* If you are performing pushes, pops, and unsets on your array, | |
* you may need this function to determine scalar-ness. | |
* | |
* @param array $a | |
* @return boolean | |
*/ | |
function isArrayWithOnlyAscendingIntKeys(array $a) | |
{ | |
if (!is_array($a)) | |
return false; | |
$prev = null; | |
foreach ($a as $k => $v) | |
{ | |
if (!is_int($k) || (null !== $prev && $k <= $prev)) | |
return false; | |
$prev = $k; | |
} | |
return true; | |
} | |
/** | |
* isArrayWithOnlyZeroBasedSequentialIntKeys defines a scalar array | |
* as containing only integer keys in sequential, ascending order, | |
* starting from 0. | |
* | |
* If you are only performing operations on your array that are | |
* guaranteed to either maintain consistent key values, or that | |
* re-base the keys for consistency, then you can use this function. | |
* | |
* @param array $a | |
* @return boolean | |
*/ | |
function isArrayWithOnlyZeroBasedSequentialIntKeys(array $a) | |
{ | |
if (!is_array($a)) | |
return false; | |
$i = 0; | |
foreach ($a as $k => $v) | |
if ($i++ !== $k) | |
return false; | |
return true; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment