summaryrefslogtreecommitdiffstats
path: root/vendor/ipl/stdlib/src/functions.php
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/ipl/stdlib/src/functions.php')
-rw-r--r--vendor/ipl/stdlib/src/functions.php71
1 files changed, 71 insertions, 0 deletions
diff --git a/vendor/ipl/stdlib/src/functions.php b/vendor/ipl/stdlib/src/functions.php
new file mode 100644
index 0000000..2091c2c
--- /dev/null
+++ b/vendor/ipl/stdlib/src/functions.php
@@ -0,0 +1,71 @@
+<?php
+
+namespace ipl\Stdlib;
+
+use InvalidArgumentException;
+use Traversable;
+use stdClass;
+
+/**
+ * Detect and return the PHP type of the given subject
+ *
+ * If subject is an object, the name of the object's class is returned, otherwise the subject's type.
+ *
+ * @param $subject
+ *
+ * @return string
+ */
+function get_php_type($subject)
+{
+ if (is_object($subject)) {
+ return get_class($subject);
+ } else {
+ return gettype($subject);
+ }
+}
+
+/**
+ * Get the array value of the given subject
+ *
+ * @param array|object|Traversable $subject
+ *
+ * @return array
+ *
+ * @throws InvalidArgumentException If subject type is invalid
+ */
+function arrayval($subject)
+{
+ if (is_array($subject)) {
+ return $subject;
+ }
+
+ if ($subject instanceof stdClass) {
+ return (array) $subject;
+ }
+
+ if ($subject instanceof Traversable) {
+ // Works for generators too
+ return iterator_to_array($subject);
+ }
+
+ throw new InvalidArgumentException(sprintf(
+ 'arrayval expects arrays, objects or instances of Traversable. Got %s instead.',
+ get_php_type($subject)
+ ));
+}
+
+/**
+ * Get the first key of an iterable
+ *
+ * @param iterable $iterable
+ *
+ * @return mixed The first key of the iterable if it is not empty, null otherwise
+ */
+function iterable_key_first($iterable)
+{
+ foreach ($iterable as $key => $_) {
+ return $key;
+ }
+
+ return null;
+}