{
    "_readme": [
        "This file is automatically generated by our phpDocGen.php and is",
        "a part of our auto-documentation process. If you see a mistake,",
        "please edit the documentation in the respective function files."
    ],
    "methods": [
        {
            "name": "append",
            "namespace": "arrays",
            "summary": "<p>Append an item to array.</p>",
            "summaryRaw": "Append an item to array.",
            "description": "<p><strong>Usage</strong></p>\n<pre><code class=\"language-php\">__::append([1, 2, 3], 4);</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>[1, 2, 3, 4]</code></pre>",
            "descriptionRaw": "**Usage**\n\n```php\n__::append([1, 2, 3], 4);\n```\n\n**Result**\n\n```\n[1, 2, 3, 4]\n```",
            "arguments": [
                {
                    "name": "array",
                    "isVariadic": false,
                    "description": "The original array",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "array"
                },
                {
                    "name": "value",
                    "isVariadic": false,
                    "description": "The new item or value to append",
                    "defaultValue": null,
                    "defaultValueAsString": "null",
                    "type": "mixed"
                }
            ],
            "changelog": [],
            "exceptions": [],
            "return": {
                "type": "array",
                "description": ""
            }
        },
        {
            "name": "chunk",
            "namespace": "arrays",
            "summary": "<p>Creates an array of elements split into groups the length of <code>$size</code>.</p>",
            "summaryRaw": "Creates an array of elements split into groups the length of `$size`.",
            "description": "<p>If array can't be split evenly, the final chunk will be the remaining\nelements. When <code>$preserveKeys</code> is set to TRUE, keys will be preserved.\nDefault is FALSE, which will reindex the chunk numerically.</p>\n<p><strong>Usage</strong></p>\n<pre><code class=\"language-php\">__::chunk([1, 2, 3, 4, 5], 3);</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>[[1, 2, 3], [4, 5]]</code></pre>",
            "descriptionRaw": "If array can't be split evenly, the final chunk will be the remaining\nelements. When `$preserveKeys` is set to TRUE, keys will be preserved.\nDefault is FALSE, which will reindex the chunk numerically.\n\n**Usage**\n\n```php\n__::chunk([1, 2, 3, 4, 5], 3);\n```\n\n**Result**\n\n```\n[[1, 2, 3], [4, 5]]\n```",
            "arguments": [
                {
                    "name": "iterable",
                    "isVariadic": false,
                    "description": "The original array",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "iterable"
                },
                {
                    "name": "size",
                    "isVariadic": false,
                    "description": "The chunk size",
                    "defaultValue": 1,
                    "defaultValueAsString": 1,
                    "type": "int"
                },
                {
                    "name": "preserveKeys",
                    "isVariadic": false,
                    "description": "Whether or not to preserve index keys",
                    "defaultValue": false,
                    "defaultValueAsString": "false",
                    "type": "bool"
                }
            ],
            "changelog": [
                {
                    "version": "0.2.0",
                    "message": "iterable objects are now supported"
                }
            ],
            "exceptions": [
                {
                    "exception": "\\InvalidArgumentException",
                    "message": "when an non-array or non-traversable object is given for $iterable."
                },
                {
                    "exception": "\\Exception",
                    "message": "when an `\\IteratorAggregate` is given and `getIterator()` throws an exception."
                }
            ],
            "return": {
                "type": "array|\\Generator",
                "description": "<p>When given a <code>\\Traversable</code> object for <code>$iterable</code>, a generator will be returned.\nOtherwise, an array will be returned.</p>"
            }
        },
        {
            "name": "compact",
            "namespace": "arrays",
            "summary": "<p>Creates an array with all falsey values removed.</p>",
            "summaryRaw": "Creates an array with all falsey values removed.",
            "description": "<p>The following values are considered falsey:</p>\n<ul>\n<li><code>false</code></li>\n<li><code>null</code></li>\n<li><code>0</code></li>\n<li><code>\"\"</code></li>\n<li><code>undefined</code></li>\n<li><code>NaN</code></li>\n</ul>\n<p><strong>Usage</strong></p>\n<pre><code class=\"language-php\">__::compact([0, 1, false, 2, '', 3]);</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>[1, 2, 3]</code></pre>",
            "descriptionRaw": "The following values are considered falsey:\n\n- `false`\n- `null`\n- `0`\n- `\"\"`\n- `undefined`\n- `NaN`\n\n**Usage**\n\n```php\n__::compact([0, 1, false, 2, '', 3]);\n```\n\n**Result**\n\n```\n[1, 2, 3]\n```",
            "arguments": [
                {
                    "name": "iterable",
                    "isVariadic": false,
                    "description": "The array to compact",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "iterable"
                }
            ],
            "changelog": [
                {
                    "version": "0.2.0",
                    "message": "iterable objects are now supported"
                }
            ],
            "exceptions": [],
            "return": {
                "type": "array|\\Generator",
                "description": ""
            }
        },
        {
            "name": "drop",
            "namespace": "arrays",
            "summary": "<p>Creates a slice of array with n elements dropped from the beginning.</p>",
            "summaryRaw": "Creates a slice of array with n elements dropped from the beginning.",
            "description": "<p><strong>Usage</strong></p>\n<pre><code class=\"language-php\">__::drop([0, 1, 3, 5], 2);</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>[3, 5]</code></pre>",
            "descriptionRaw": "**Usage**\n\n```php\n__::drop([0, 1, 3, 5], 2);\n```\n\n**Result**\n\n```\n[3, 5]\n```",
            "arguments": [
                {
                    "name": "input",
                    "isVariadic": false,
                    "description": "The array or iterable to query.",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "iterable"
                },
                {
                    "name": "number",
                    "isVariadic": false,
                    "description": "The number of elements to drop.",
                    "defaultValue": 1,
                    "defaultValueAsString": 1,
                    "type": "int"
                }
            ],
            "changelog": [
                {
                    "version": "0.2.0",
                    "message": "iterable objects are now supported"
                }
            ],
            "exceptions": [],
            "return": {
                "type": "array|\\Generator",
                "description": ""
            }
        },
        {
            "name": "dropRight",
            "namespace": "arrays",
            "summary": "<p>Creates a slice of an array with n elements dropped from the end.</p>",
            "summaryRaw": "Creates a slice of an array with n elements dropped from the end.",
            "description": "<p>If the provided iterator is an array, then an array will be returned.\nOtherwise, a Generator will be returned. In this latter case, the entire\niterable will be buffered in memory. If the iterable contains many\nelements, then this could cause memory issues.</p>\n<p><strong>Usage</strong></p>\n<pre><code class=\"language-php\">__::dropRight([0, 1, 3, 5], 2);</code></pre>\n<p><strong>Result</strong></p>\n<pre><code class=\"language-php\">[0, 1]</code></pre>",
            "descriptionRaw": "If the provided iterator is an array, then an array will be returned.\nOtherwise, a Generator will be returned. In this latter case, the entire\niterable will be buffered in memory. If the iterable contains many\nelements, then this could cause memory issues.\n\n**Usage**\n\n```php\n__::dropRight([0, 1, 3, 5], 2);\n```\n\n**Result**\n\n```php\n[0, 1]\n```",
            "arguments": [
                {
                    "name": "input",
                    "isVariadic": false,
                    "description": "The array to query.",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "iterable"
                },
                {
                    "name": "number",
                    "isVariadic": false,
                    "description": "The number of elements to drop.",
                    "defaultValue": 1,
                    "defaultValueAsString": 1,
                    "type": "int"
                }
            ],
            "changelog": [
                {
                    "version": "0.2.3",
                    "message": "added to Bottomline"
                }
            ],
            "exceptions": [],
            "return": {
                "type": "array|\\Generator",
                "description": "<p>An array containing a subset of the input array with front items matching the condition\nremoved. If the provided iterable is not an array, then a Generator will be returned.</p>"
            }
        },
        {
            "name": "dropRightWhile",
            "namespace": "arrays",
            "summary": "<p>Creates a slice of the provided array with all elements matching the condition\nremoved from the end.</p>",
            "summaryRaw": "Creates a slice of the provided array with all elements matching the condition\nremoved from the end.",
            "description": "<p>If the provided iterator is an array, then an array will be returned.\nOtherwise, a Generator will be returned. In this latter case, the entire\niterable will be buffered in memory. If the iterable contains many\nelements, then this could cause memory issues.</p>\n<p><strong>Drop by Primitive Condition</strong></p>\n<pre><code class=\"language-php\">__::dropRightWhile([1, 2, 3, 3], 3);</code></pre>\n<p><strong>Result</strong></p>\n<pre><code class=\"language-php\">[1, 2]</code></pre>\n<p><strong>Drop by Callback</strong></p>\n<pre><code class=\"language-php\">__::dropRightWhile([1, 2, 3, 4, 5], static function ($item) {<br />\n    return $item &gt; 3;<br />\n});</code></pre>\n<p><strong>Result</strong></p>\n<pre><code class=\"language-php\">[1, 2, 3]</code></pre>",
            "descriptionRaw": "If the provided iterator is an array, then an array will be returned.\nOtherwise, a Generator will be returned. In this latter case, the entire\niterable will be buffered in memory. If the iterable contains many\nelements, then this could cause memory issues.\n\n**Drop by Primitive Condition**\n\n```php\n__::dropRightWhile([1, 2, 3, 3], 3);\n```\n\n**Result**\n\n```php\n[1, 2]\n```\n\n**Drop by Callback**\n\n```php\n__::dropRightWhile([1, 2, 3, 4, 5], static function ($item) {\n    return $item > 3;\n});\n```\n\n**Result**\n\n```php\n[1, 2, 3]\n```",
            "arguments": [
                {
                    "name": "input",
                    "isVariadic": false,
                    "description": "An array of values.",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "iterable"
                },
                {
                    "name": "condition",
                    "isVariadic": false,
                    "description": "Condition to drop by using either a primitive value or a callback",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "\\Closure|float|int|string|bool"
                }
            ],
            "changelog": [
                {
                    "version": "0.2.3",
                    "message": "added to Bottomline"
                }
            ],
            "exceptions": [],
            "return": {
                "type": "array|\\Generator",
                "description": "<p>An array containing a subset of the input array with front items matching the condition\nremoved. If the provided iterable is not an array, then a Generator will be returned.</p>"
            }
        },
        {
            "name": "dropWhile",
            "namespace": "arrays",
            "summary": "<p>Creates a slice of the provided array with all elements matching the condition\nremoved from the front.</p>",
            "summaryRaw": "Creates a slice of the provided array with all elements matching the condition\nremoved from the front.",
            "description": "<p><strong>Drop by Primitive Condition</strong></p>\n<pre><code class=\"language-php\">__::dropWhile([1, 1, 2, 3, 4], 1);</code></pre>\n<p><strong>Result</strong></p>\n<pre><code class=\"language-php\">[2, 3, 4]</code></pre>\n<p><strong>Drop by Callback</strong></p>\n<pre><code class=\"language-php\">__::dropWhile([1, 2, 3, 4, 5], static function ($item) {<br />\n    return $item &lt; 3;<br />\n});</code></pre>\n<p><strong>Result</strong></p>\n<pre><code class=\"language-php\">[3, 4, 5]</code></pre>",
            "descriptionRaw": "**Drop by Primitive Condition**\n\n```php\n__::dropWhile([1, 1, 2, 3, 4], 1);\n```\n\n**Result**\n\n```php\n[2, 3, 4]\n```\n\n**Drop by Callback**\n\n```php\n__::dropWhile([1, 2, 3, 4, 5], static function ($item) {\n    return $item < 3;\n});\n```\n\n**Result**\n\n```php\n[3, 4, 5]\n```",
            "arguments": [
                {
                    "name": "input",
                    "isVariadic": false,
                    "description": "An array or iterable of values to look through.",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "array|iterable"
                },
                {
                    "name": "condition",
                    "isVariadic": false,
                    "description": "Condition to drop by using either a primitive value or a callback.",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "\\Closure|float|int|string|bool"
                }
            ],
            "changelog": [
                {
                    "version": "0.2.3",
                    "message": "added to Bottomline"
                }
            ],
            "exceptions": [],
            "return": {
                "type": "array|\\Generator",
                "description": "<p>An array containing a subset of the input array with front\nitems matching the condition removed. If the input was not an array, then a \\Generator\nwill be returned.</p>"
            }
        },
        {
            "name": "flatten",
            "namespace": "arrays",
            "summary": "<p>Flattens a multidimensional array or iterable.</p>",
            "summaryRaw": "Flattens a multidimensional array or iterable.",
            "description": "<p>If <code>$shallow</code> is set to TRUE, the array will only be flattened a single level.</p>\n<p><strong>Usage</strong></p>\n<pre><code class=\"language-php\">__::flatten([1, 2, [3, [4]]], false);</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>[1, 2, 3, 4]</code></pre>",
            "descriptionRaw": "If `$shallow` is set to TRUE, the array will only be flattened a single level.\n\n**Usage**\n\n```php\n__::flatten([1, 2, [3, [4]]], false);\n```\n\n**Result**\n\n```\n[1, 2, 3, 4]\n```",
            "arguments": [
                {
                    "name": "iterable",
                    "isVariadic": false,
                    "description": "",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "iterable"
                },
                {
                    "name": "shallow",
                    "isVariadic": false,
                    "description": "",
                    "defaultValue": false,
                    "defaultValueAsString": "false",
                    "type": "bool"
                }
            ],
            "changelog": [
                {
                    "version": "0.2.0",
                    "message": "iterable objects are now supported"
                }
            ],
            "exceptions": [],
            "return": {
                "type": "array|\\Generator",
                "description": ""
            }
        },
        {
            "name": "patch",
            "namespace": "arrays",
            "summary": "<p>Patches array by xpath.</p>",
            "summaryRaw": "Patches array by xpath.",
            "description": "<p><strong>Usage</strong></p>\n<pre><code class=\"language-php\">__::patch(<br />\n    [<br />\n        'addr' =&gt; [<br />\n            'country' =&gt; 'US',<br />\n            'zip' =&gt; 12345<br />\n        ]<br />\n    ],<br />\n    [<br />\n        '/addr/country' =&gt; 'CA',<br />\n        '/addr/zip' =&gt; 54321<br />\n    ]<br />\n);</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>['addr' =&gt; ['country' =&gt; 'CA', 'zip' =&gt; 54321]]</code></pre>",
            "descriptionRaw": "**Usage**\n\n```php\n__::patch(\n    [\n        'addr' => [\n            'country' => 'US',\n            'zip' => 12345\n        ]\n    ],\n    [\n        '/addr/country' => 'CA',\n        '/addr/zip' => 54321\n    ]\n);\n```\n\n**Result**\n\n```\n['addr' => ['country' => 'CA', 'zip' => 54321]]\n```",
            "arguments": [
                {
                    "name": "array",
                    "isVariadic": false,
                    "description": "The array to patch",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "array"
                },
                {
                    "name": "patches",
                    "isVariadic": false,
                    "description": "List of new xpath-value pairs",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "array"
                },
                {
                    "name": "parent",
                    "isVariadic": false,
                    "description": "",
                    "defaultValue": "",
                    "defaultValueAsString": "''",
                    "type": "string"
                }
            ],
            "changelog": [],
            "exceptions": [],
            "return": {
                "type": "array",
                "description": "<p>Returns patched array</p>"
            }
        },
        {
            "name": "prepend",
            "namespace": "arrays",
            "summary": "<p>Prepend item or value to an array.</p>",
            "summaryRaw": "Prepend item or value to an array.",
            "description": "<p><strong>Usage</strong></p>\n<pre><code class=\"language-php\">__::prepend([1, 2, 3], 4);</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>[4, 1, 2, 3]</code></pre>",
            "descriptionRaw": "**Usage**\n\n```php\n__::prepend([1, 2, 3], 4);\n```\n\n**Result**\n\n```\n[4, 1, 2, 3]\n```",
            "arguments": [
                {
                    "name": "array",
                    "isVariadic": false,
                    "description": "",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "array"
                },
                {
                    "name": "value",
                    "isVariadic": false,
                    "description": "",
                    "defaultValue": null,
                    "defaultValueAsString": "null",
                    "type": "mixed"
                }
            ],
            "changelog": [],
            "exceptions": [],
            "return": {
                "type": "array",
                "description": ""
            }
        },
        {
            "name": "randomize",
            "namespace": "arrays",
            "summary": "<p>Shuffle an array ensuring no item remains in the same position.</p>",
            "summaryRaw": "Shuffle an array ensuring no item remains in the same position.",
            "description": "<p><strong>Usage</strong></p>\n<pre><code class=\"language-php\">__::randomize([1, 2, 3]);</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>[2, 3, 1]</code></pre>",
            "descriptionRaw": "**Usage**\n\n```php\n__::randomize([1, 2, 3]);\n```\n\n**Result**\n\n```\n[2, 3, 1]\n```",
            "arguments": [
                {
                    "name": "array",
                    "isVariadic": false,
                    "description": "original array",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "array"
                }
            ],
            "changelog": [],
            "exceptions": [],
            "return": {
                "type": "array",
                "description": ""
            }
        },
        {
            "name": "range",
            "namespace": "arrays",
            "summary": "<p>Generate range of values based on start, end, and step.</p>",
            "summaryRaw": "Generate range of values based on start, end, and step.",
            "description": "<p><strong>Usage</strong></p>\n<pre><code class=\"language-php\">__::range(1, 10, 2);</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>[1, 3, 5, 7, 9]</code></pre>",
            "descriptionRaw": "**Usage**\n\n```php\n__::range(1, 10, 2);\n```\n\n**Result**\n\n```\n[1, 3, 5, 7, 9]\n```",
            "arguments": [
                {
                    "name": "start",
                    "isVariadic": false,
                    "description": "range start",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "int"
                },
                {
                    "name": "stop",
                    "isVariadic": false,
                    "description": "range end",
                    "defaultValue": null,
                    "defaultValueAsString": "null",
                    "type": "int"
                },
                {
                    "name": "step",
                    "isVariadic": false,
                    "description": "range step value",
                    "defaultValue": 1,
                    "defaultValueAsString": 1,
                    "type": "int"
                }
            ],
            "changelog": [],
            "exceptions": [],
            "return": {
                "type": "array",
                "description": "<p>range of values</p>"
            }
        },
        {
            "name": "repeat",
            "namespace": "arrays",
            "summary": "<p>Generate array of repeated values.</p>",
            "summaryRaw": "Generate array of repeated values.",
            "description": "<p><strong>Usage</strong></p>\n<pre><code class=\"language-php\">__::repeat('foo', 3);</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>['foo', 'foo', 'foo']</code></pre>",
            "descriptionRaw": "**Usage**\n\n```php\n__::repeat('foo', 3);\n```\n\n**Result**\n\n```\n['foo', 'foo', 'foo']\n```",
            "arguments": [
                {
                    "name": "object",
                    "isVariadic": false,
                    "description": "The object to repeat.",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "mixed"
                },
                {
                    "name": "times",
                    "isVariadic": false,
                    "description": "How many times has to be repeated.",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "int"
                }
            ],
            "changelog": [
                {
                    "version": "0.2.1",
                    "message": "$object typehint was changed from `string` to `mixed`"
                }
            ],
            "exceptions": [],
            "return": {
                "type": "array",
                "description": "<p>Returns a new array of filled values.</p>"
            }
        },
        {
            "name": "assign",
            "namespace": "collections",
            "summary": "<p>Combines and merge collections provided with each others.</p>",
            "summaryRaw": "Combines and merge collections provided with each others.",
            "description": "<p>If the collections have common keys, then the last passed keys override the\nprevious. If numerical indexes are passed, then last passed indexes override\nthe previous.</p>\n<p>For a recursive merge, see <code>__::merge()</code>.</p>\n<p><strong>Usage</strong></p>\n<pre><code class=\"language-php\">__::assign(<br />\n    [<br />\n        'color' =&gt; [<br />\n            'favorite' =&gt; 'red',<br />\n            5<br />\n        ],<br />\n        3<br />\n    ],<br />\n    [<br />\n        10,<br />\n        'color' =&gt; [<br />\n            'favorite' =&gt; 'green',<br />\n            'blue'<br />\n        ]<br />\n    ]<br />\n);</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>[<br />\n    'color' =&gt; ['favorite' =&gt; 'green', 'blue'],<br />\n    10<br />\n]</code></pre>",
            "descriptionRaw": "If the collections have common keys, then the last passed keys override the\nprevious. If numerical indexes are passed, then last passed indexes override\nthe previous.\n\nFor a recursive merge, see `__::merge()`.\n\n**Usage**\n\n```php\n__::assign(\n    [\n        'color' => [\n            'favorite' => 'red',\n            5\n        ],\n        3\n    ],\n    [\n        10,\n        'color' => [\n            'favorite' => 'green',\n            'blue'\n        ]\n    ]\n);\n```\n\n**Result**\n\n```\n[\n    'color' => ['favorite' => 'green', 'blue'],\n    10\n]\n```",
            "arguments": [
                {
                    "name": "_",
                    "isVariadic": true,
                    "description": "Collections to assign.",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "array|object"
                }
            ],
            "changelog": [],
            "exceptions": [],
            "return": {
                "type": "array|object",
                "description": "<p>Assigned collection.</p>"
            }
        },
        {
            "name": "concat",
            "namespace": "collections",
            "summary": "<p>Combines and concat collections provided with each others.</p>",
            "summaryRaw": "Combines and concat collections provided with each others.",
            "description": "<p>If the collections have common keys, then the values are appended in an array.\nIf numerical indexes are passed, then values are appended.</p>\n<p>For a recursive merge, see <code>__::merge()</code>.</p>\n<p><strong>Usage</strong></p>\n<pre><code class=\"language-php\">__::concat(<br />\n    ['color' =&gt; ['favorite' =&gt; 'red', 5], 3],<br />\n    [10, 'color' =&gt; ['favorite' =&gt; 'green', 'blue']]<br />\n);</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>[<br />\n    'color' =&gt; ['favorite' =&gt; ['green'], 5, 'blue'],<br />\n    3,<br />\n    10<br />\n]</code></pre>",
            "descriptionRaw": "If the collections have common keys, then the values are appended in an array.\nIf numerical indexes are passed, then values are appended.\n\nFor a recursive merge, see `__::merge()`.\n\n**Usage**\n\n```php\n__::concat(\n    ['color' => ['favorite' => 'red', 5], 3],\n    [10, 'color' => ['favorite' => 'green', 'blue']]\n);\n```\n\n**Result**\n\n```\n[\n    'color' => ['favorite' => ['green'], 5, 'blue'],\n    3,\n    10\n]\n```",
            "arguments": [
                {
                    "name": "collection",
                    "isVariadic": false,
                    "description": "Collection to assign to.",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "iterable|\\stdClass"
                },
                {
                    "name": "_",
                    "isVariadic": true,
                    "description": "N other collections to assign.",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "iterable|\\stdClass"
                }
            ],
            "changelog": [
                {
                    "version": "0.2.0",
                    "message": "added support for iterables"
                }
            ],
            "exceptions": [],
            "return": {
                "type": "array|\\stdClass",
                "description": "<p>If the first argument given to this function is an\n<code>\\stdClass</code>, an <code>\\stdClass</code> will be returned. Otherwise, an array will be\nreturned.</p>"
            }
        },
        {
            "name": "concatDeep",
            "namespace": "collections",
            "summary": "<p>Recursively combines and concat collections provided with each others.</p>",
            "summaryRaw": "Recursively combines and concat collections provided with each others.",
            "description": "<p>If the collections have common keys, then the values are appended in an array.\nIf numerical indexes are passed, then values are appended.</p>\n<p>For a non-recursive concat, see <code>__::concat()</code>.</p>\n<p><strong>Usage</strong></p>\n<pre><code class=\"language-php\">__::concatDeep(<br />\n    ['color' =&gt; ['favorite' =&gt; 'red', 5], 3],<br />\n    [10, 'color' =&gt; ['favorite' =&gt; 'green', 'blue']]<br />\n);</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>[<br />\n    'color' =&gt; [<br />\n        'favorite' =&gt; ['red', 'green'],<br />\n        5,<br />\n        'blue'<br />\n    ],<br />\n    3,<br />\n    10<br />\n]</code></pre>",
            "descriptionRaw": "If the collections have common keys, then the values are appended in an array.\nIf numerical indexes are passed, then values are appended.\n\nFor a non-recursive concat, see `__::concat()`.\n\n**Usage**\n\n```php\n__::concatDeep(\n    ['color' => ['favorite' => 'red', 5], 3],\n    [10, 'color' => ['favorite' => 'green', 'blue']]\n);\n```\n\n**Result**\n\n```\n[\n    'color' => [\n        'favorite' => ['red', 'green'],\n        5,\n        'blue'\n    ],\n    3,\n    10\n]\n```",
            "arguments": [
                {
                    "name": "collection",
                    "isVariadic": false,
                    "description": "First collection to concatDeep.",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "iterable|\\stdClass"
                },
                {
                    "name": "_",
                    "isVariadic": true,
                    "description": "N other collections to concatDeep.",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "iterable|\\stdClass"
                }
            ],
            "changelog": [
                {
                    "version": "0.2.0",
                    "message": "iterable support was added"
                }
            ],
            "exceptions": [],
            "return": {
                "type": "array|\\stdClass",
                "description": "<p>A concatenated collection. When the first argument given\nis an <code>\\stdClass</code>, then resulting value will be an <code>\\stdClass</code>. Otherwise,\nan array will always be returned.</p>"
            }
        },
        {
            "name": "doForEach",
            "namespace": "collections",
            "summary": "<p>Iterate over elements of the collection and invokes iteratee for each element.</p>",
            "summaryRaw": "Iterate over elements of the collection and invokes iteratee for each element.",
            "description": "<p>The iteratee is invoked with three arguments: (value, index|key, collection).\nIteratee functions may exit iteration early by explicitly returning false.</p>\n<p><strong>Usage</strong></p>\n<pre><code class=\"language-php\">__::doForEach([1, 2, 3], function ($value, $key, $collection) {<br />\n    print_r($value)<br />\n});</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>(Side effect: print 1, 2, 3)</code></pre>",
            "descriptionRaw": "The iteratee is invoked with three arguments: (value, index|key, collection).\nIteratee functions may exit iteration early by explicitly returning false.\n\n**Usage**\n\n```php\n__::doForEach([1, 2, 3], function ($value, $key, $collection) {\n    print_r($value)\n});\n```\n\n**Result**\n\n```\n(Side effect: print 1, 2, 3)\n```",
            "arguments": [
                {
                    "name": "collection",
                    "isVariadic": false,
                    "description": "The collection to iterate over.",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "iterable|\\stdClass"
                },
                {
                    "name": "iteratee",
                    "isVariadic": false,
                    "description": "The function to call for each value.",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "\\Closure"
                }
            ],
            "changelog": [],
            "exceptions": [],
            "return": {
                "type": "void",
                "description": ""
            }
        },
        {
            "name": "doForEachRight",
            "namespace": "collections",
            "summary": "<p>Iterate over elements of the collection, from right to left, and invokes iteratee\nfor each element.</p>",
            "summaryRaw": "Iterate over elements of the collection, from right to left, and invokes iteratee\nfor each element.",
            "description": "<p>The iteratee is invoked with three arguments: (value, index|key, collection).\nIteratee functions may exit iteration early by explicitly returning false.</p>\n<p><strong>Usage</strong></p>\n<pre><code class=\"language-php\">__::doForEachRight([1, 2, 3], function ($value, $key, $collection) {<br />\n    print_r($value);<br />\n});</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>(Side effect: print 3, 2, 1)</code></pre>",
            "descriptionRaw": "The iteratee is invoked with three arguments: (value, index|key, collection).\nIteratee functions may exit iteration early by explicitly returning false.\n\n**Usage**\n\n```php\n__::doForEachRight([1, 2, 3], function ($value, $key, $collection) {\n    print_r($value);\n});\n```\n\n**Result**\n\n```\n(Side effect: print 3, 2, 1)\n```",
            "arguments": [
                {
                    "name": "collection",
                    "isVariadic": false,
                    "description": "The collection to iterate over.",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "iterable|\\stdClass"
                },
                {
                    "name": "iteratee",
                    "isVariadic": false,
                    "description": "The function to call for each value.",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "\\Closure"
                }
            ],
            "changelog": [],
            "exceptions": [],
            "return": {
                "type": "void",
                "description": ""
            }
        },
        {
            "name": "ease",
            "namespace": "collections",
            "summary": "<p>Flattens a complex collection by mapping each ending leafs value to a key\nconsisting of all previous indexes.</p>",
            "summaryRaw": "Flattens a complex collection by mapping each ending leafs value to a key\nconsisting of all previous indexes.",
            "description": "<p><strong>Usage</strong></p>\n<pre><code class=\"language-php\">__::ease([<br />\n    'foo' =&gt; ['bar' =&gt; 'ter'],<br />\n    'baz' =&gt; ['b', 'z']<br />\n]);</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>[<br />\n    'foo.bar' =&gt; 'ter',<br />\n    'baz.0' =&gt; 'b',<br />\n    'baz.1' =&gt; 'z'<br />\n]</code></pre>",
            "descriptionRaw": "**Usage**\n\n```php\n__::ease([\n    'foo' => ['bar' => 'ter'],\n    'baz' => ['b', 'z']\n]);\n```\n\n**Result**\n\n```\n[\n    'foo.bar' => 'ter',\n    'baz.0' => 'b',\n    'baz.1' => 'z'\n]\n```",
            "arguments": [
                {
                    "name": "collection",
                    "isVariadic": false,
                    "description": "array of values",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "iterable"
                },
                {
                    "name": "glue",
                    "isVariadic": false,
                    "description": "glue between key path",
                    "defaultValue": ".",
                    "defaultValueAsString": "'.'",
                    "type": "string"
                }
            ],
            "changelog": [
                {
                    "version": "0.2.0",
                    "message": "added support for iterables"
                }
            ],
            "exceptions": [],
            "return": {
                "type": "array",
                "description": "<p>flatten collection</p>"
            }
        },
        {
            "name": "every",
            "namespace": "collections",
            "summary": "<p>Checks if predicate returns truthy for all elements of collection.</p>",
            "summaryRaw": "Checks if predicate returns truthy for all elements of collection.",
            "description": "<p>Iteration is stopped once predicate returns falsey.</p>\n<p><strong>Usage</strong></p>\n<pre><code class=\"language-php\">__::every([1, 3, 4], function ($value, $key, $collection) {<br />\n    return is_int($v);<br />\n});</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>true</code></pre>",
            "descriptionRaw": "Iteration is stopped once predicate returns falsey.\n\n**Usage**\n\n```php\n__::every([1, 3, 4], function ($value, $key, $collection) {\n    return is_int($v);\n});\n```\n\n**Result**\n\n```\ntrue\n```",
            "arguments": [
                {
                    "name": "collection",
                    "isVariadic": false,
                    "description": "The collection to iterate over.",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "iterable|\\stdClass"
                },
                {
                    "name": "iteratee",
                    "isVariadic": false,
                    "description": "The function to call for each value.",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "\\Closure"
                }
            ],
            "changelog": [],
            "exceptions": [],
            "return": {
                "type": "bool",
                "description": ""
            }
        },
        {
            "name": "filter",
            "namespace": "collections",
            "summary": "<p>Returns the values in the collection that pass the truth test.</p>",
            "summaryRaw": "Returns the values in the collection that pass the truth test.",
            "description": "<p>When <code>$closure</code> is set to null, this function will automatically remove falsey\nvalues. When <code>$closure</code> is given, then values where the closure returns false\nwill be removed.</p>\n<p><strong>Usage</strong></p>\n<pre><code class=\"language-php\">$a = [<br />\n    ['name' =&gt; 'fred',   'age' =&gt; 32],<br />\n    ['name' =&gt; 'maciej', 'age' =&gt; 16]<br />\n];<br />\n<br />\n__::filter($a, function($n) {<br />\n    return $n['age'] &gt; 24;<br />\n});</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>[['name' =&gt; 'fred', 'age' =&gt; 32]]</code></pre>",
            "descriptionRaw": "When `$closure` is set to null, this function will automatically remove falsey\nvalues. When `$closure` is given, then values where the closure returns false\nwill be removed.\n\n**Usage**\n\n```php\n$a = [\n    ['name' => 'fred',   'age' => 32],\n    ['name' => 'maciej', 'age' => 16]\n];\n\n__::filter($a, function($n) {\n    return $n['age'] > 24;\n});\n```\n\n**Result**\n\n```\n[['name' => 'fred', 'age' => 32]]\n```",
            "arguments": [
                {
                    "name": "iterable",
                    "isVariadic": false,
                    "description": "Array to filter",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "iterable"
                },
                {
                    "name": "closure",
                    "isVariadic": false,
                    "description": "Closure to filter the array",
                    "defaultValue": null,
                    "defaultValueAsString": "null",
                    "type": "\\Closure|null"
                }
            ],
            "changelog": [
                {
                    "version": "0.2.0",
                    "message": "iterable objects are now supported"
                }
            ],
            "exceptions": [
                {
                    "exception": "\\InvalidArgumentException",
                    "message": "when an non-array or non-traversable object is given for $iterable."
                }
            ],
            "return": {
                "type": "array|\\Generator",
                "description": "<p>When given a <code>\\Traversable</code> object for <code>$iterable</code>, a generator will be returned.\nOtherwise, an array will be returned.</p>"
            }
        },
        {
            "name": "find",
            "namespace": "collections",
            "summary": "<p>Return the first element that matches the given condition or <code>$returnValue</code> if no value is found (defaults to null).</p>",
            "summaryRaw": "Return the first element that matches the given condition or `$returnValue` if no value is found (defaults to null).",
            "description": "<p><strong>Find by Primitive Condition in Array</strong></p>\n<pre><code class=\"language-php\">$data = [<br />\n    \"table\"    =&gt; \"trick\",<br />\n    \"pen\"      =&gt; \"defend\",<br />\n    \"motherly\" =&gt; \"wide\",<br />\n    \"may\"      =&gt; \"needle\",<br />\n    \"sweat\"    =&gt; \"cake\",<br />\n    \"sword\"    =&gt; \"defend\",<br />\n];<br />\n<br />\n__::find($data, \"defend\");</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>\"defend\"</code></pre>\n<p><strong>Find by Callback in an Array</strong></p>\n<pre><code class=\"language-php\">$data = [<br />\n    \"table\"    =&gt; (object)[\"name\" =&gt; \"trick\"],<br />\n    \"pen\"      =&gt; (object)[\"name\" =&gt; \"defend\"],<br />\n    \"motherly\" =&gt; (object)[\"name\" =&gt; \"wide\"],<br />\n    \"may\"      =&gt; (object)[\"name\" =&gt; \"needle\"],<br />\n    \"sweat\"    =&gt; (object)[\"name\" =&gt; \"cake\"],<br />\n    \"sword\"    =&gt; (object)[\"name\" =&gt; \"defend\"],<br />\n];<br />\n<br />\n__::find($data, static function ($object, $key, $collection) {<br />\n   return $object-&gt;name === \"defend\";<br />\n});</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>$data[\"pen\"]</code></pre>",
            "descriptionRaw": "**Find by Primitive Condition in Array**\n\n```php\n$data = [\n    \"table\"    => \"trick\",\n    \"pen\"      => \"defend\",\n    \"motherly\" => \"wide\",\n    \"may\"      => \"needle\",\n    \"sweat\"    => \"cake\",\n    \"sword\"    => \"defend\",\n];\n\n__::find($data, \"defend\");\n```\n\n**Result**\n\n```\n\"defend\"\n```\n\n**Find by Callback in an Array**\n\n```php\n$data = [\n    \"table\"    => (object)[\"name\" => \"trick\"],\n    \"pen\"      => (object)[\"name\" => \"defend\"],\n    \"motherly\" => (object)[\"name\" => \"wide\"],\n    \"may\"      => (object)[\"name\" => \"needle\"],\n    \"sweat\"    => (object)[\"name\" => \"cake\"],\n    \"sword\"    => (object)[\"name\" => \"defend\"],\n];\n\n__::find($data, static function ($object, $key, $collection) {\n   return $object->name === \"defend\";\n});\n```\n\n**Result**\n\n```\n$data[\"pen\"]\n```",
            "arguments": [
                {
                    "name": "collection",
                    "isVariadic": false,
                    "description": "an array or iterable of values to look through",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "array|iterable"
                },
                {
                    "name": "condition",
                    "isVariadic": false,
                    "description": "condition to match using either a primitive value or a callback",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "bool|\\Closure|float|int|string"
                },
                {
                    "name": "returnValue",
                    "isVariadic": false,
                    "description": "the value to return if nothing matches",
                    "defaultValue": null,
                    "defaultValueAsString": "null",
                    "type": "mixed|null"
                }
            ],
            "changelog": [
                {
                    "version": "0.2.1",
                    "message": "added to bottomline"
                }
            ],
            "exceptions": [],
            "return": {
                "type": "mixed|null",
                "description": "<p>The entity from the iterable. If no value is found, <code>$returnValue</code> is returned, which defaults to\n<code>null</code>.</p>"
            }
        },
        {
            "name": "findEntry",
            "namespace": "collections",
            "summary": "<p>Find the first key/value pair of a given element that matches the given condition or null if no match is found.</p>",
            "summaryRaw": "Find the first key/value pair of a given element that matches the given condition or null if no match is found.",
            "description": "<p><strong>Find by Primitive Condition in Array</strong></p>\n<pre><code class=\"language-php\">$data = [<br />\n    \"table\"    =&gt; \"trick\",<br />\n    \"pen\"      =&gt; \"defend\",<br />\n    \"motherly\" =&gt; \"wide\",<br />\n    \"may\"      =&gt; \"needle\",<br />\n    \"sweat\"    =&gt; \"cake\",<br />\n    \"sword\"    =&gt; \"defend\",<br />\n];<br />\n<br />\n__::findEntry($data, \"defend\");</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>[\"pen\", \"defend\"]</code></pre>\n<p><strong>Find by Callback in an Array</strong></p>\n<pre><code class=\"language-php\">$data = [<br />\n    \"table\"    =&gt; (object)[\"name\" =&gt; \"trick\"],<br />\n    \"pen\"      =&gt; (object)[\"name\" =&gt; \"defend\"],<br />\n    \"motherly\" =&gt; (object)[\"name\" =&gt; \"wide\"],<br />\n    \"may\"      =&gt; (object)[\"name\" =&gt; \"needle\"],<br />\n    \"sweat\"    =&gt; (object)[\"name\" =&gt; \"cake\"],<br />\n    \"sword\"    =&gt; (object)[\"name\" =&gt; \"defend\"],<br />\n];<br />\n<br />\n__::findEntry($data, static function ($object, $key, $collection) {<br />\n   return $object-&gt;name === \"defend\";<br />\n});</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>[\"pen\", $data[\"pen\"]]</code></pre>",
            "descriptionRaw": "**Find by Primitive Condition in Array**\n\n```php\n$data = [\n    \"table\"    => \"trick\",\n    \"pen\"      => \"defend\",\n    \"motherly\" => \"wide\",\n    \"may\"      => \"needle\",\n    \"sweat\"    => \"cake\",\n    \"sword\"    => \"defend\",\n];\n\n__::findEntry($data, \"defend\");\n```\n\n**Result**\n\n```\n[\"pen\", \"defend\"]\n```\n\n**Find by Callback in an Array**\n\n```php\n$data = [\n    \"table\"    => (object)[\"name\" => \"trick\"],\n    \"pen\"      => (object)[\"name\" => \"defend\"],\n    \"motherly\" => (object)[\"name\" => \"wide\"],\n    \"may\"      => (object)[\"name\" => \"needle\"],\n    \"sweat\"    => (object)[\"name\" => \"cake\"],\n    \"sword\"    => (object)[\"name\" => \"defend\"],\n];\n\n__::findEntry($data, static function ($object, $key, $collection) {\n   return $object->name === \"defend\";\n});\n```\n\n**Result**\n\n```\n[\"pen\", $data[\"pen\"]]\n```",
            "arguments": [
                {
                    "name": "collection",
                    "isVariadic": false,
                    "description": "an array or iterable of values to look through",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "array|iterable"
                },
                {
                    "name": "condition",
                    "isVariadic": false,
                    "description": "condition to match using either a primitive value or a callback",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "bool|\\Closure|float|int|string"
                }
            ],
            "changelog": [
                {
                    "version": "0.2.1",
                    "message": "added to bottomline"
                }
            ],
            "exceptions": [],
            "return": {
                "type": "array|null",
                "description": "<p>An array with two values, the 0th index is the key and the 1st index is the value. Null is\nreturned if no entries can be found in the given collection.</p>"
            }
        },
        {
            "name": "findIndex",
            "namespace": "collections",
            "summary": "<p>Return the index or key of the <em>first</em> element that matches the given condition or <code>$returnValue</code> if no value is\nfound (defaults to <code>-1</code>).</p>",
            "summaryRaw": "Return the index or key of the _first_ element that matches the given condition or `$returnValue` if no value is\nfound (defaults to `-1`).",
            "description": "<p><strong>Find Index by Primitive Condition in a Numerically Indexed Array</strong></p>\n<pre><code class=\"language-php\">$data = [<br />\n    \"native\",<br />\n    \"pale\",<br />\n    \"explain\",<br />\n    \"persuade\",<br />\n    \"elastic\",<br />\n    \"explain\",<br />\n];<br />\n<br />\n__::findIndex($data, \"explain\")</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>2</code></pre>\n<p><strong>Find Index by Primitive Condition in an Associative Array</strong></p>\n<pre><code class=\"language-php\">$data = [<br />\n    \"table\"    =&gt; \"trick\",<br />\n    \"pen\"      =&gt; \"defend\",<br />\n    \"motherly\" =&gt; \"wide\",<br />\n    \"may\"      =&gt; \"needle\",<br />\n    \"sweat\"    =&gt; \"cake\",<br />\n    \"sword\"    =&gt; \"defend\",<br />\n];<br />\n<br />\n__::findIndex($data, \"defend\")</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>\"pen\"</code></pre>\n<p><strong>Find by Callback Usage</strong></p>\n<pre><code class=\"language-php\">$data = [<br />\n    \"table\"    =&gt; (object)[\"name\" =&gt; \"trick\"],<br />\n    \"pen\"      =&gt; (object)[\"name\" =&gt; \"defend\"],<br />\n    \"motherly\" =&gt; (object)[\"name\" =&gt; \"wide\"],<br />\n    \"may\"      =&gt; (object)[\"name\" =&gt; \"needle\"],<br />\n    \"sweat\"    =&gt; (object)[\"name\" =&gt; \"cake\"],<br />\n    \"sword\"    =&gt; (object)[\"name\" =&gt; \"defend\"],<br />\n];<br />\n<br />\n__::findIndex($data, static function ($object, $key, $collection) {<br />\n    return $object-&gt;name === \"defend\";<br />\n})</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>\"pen\"</code></pre>",
            "descriptionRaw": "**Find Index by Primitive Condition in a Numerically Indexed Array**\n\n```php\n$data = [\n    \"native\",\n    \"pale\",\n    \"explain\",\n    \"persuade\",\n    \"elastic\",\n    \"explain\",\n];\n\n__::findIndex($data, \"explain\")\n```\n\n**Result**\n\n```\n2\n```\n\n**Find Index by Primitive Condition in an Associative Array**\n\n```php\n$data = [\n    \"table\"    => \"trick\",\n    \"pen\"      => \"defend\",\n    \"motherly\" => \"wide\",\n    \"may\"      => \"needle\",\n    \"sweat\"    => \"cake\",\n    \"sword\"    => \"defend\",\n];\n\n__::findIndex($data, \"defend\")\n```\n\n**Result**\n\n```\n\"pen\"\n```\n\n**Find by Callback Usage**\n\n```php\n$data = [\n    \"table\"    => (object)[\"name\" => \"trick\"],\n    \"pen\"      => (object)[\"name\" => \"defend\"],\n    \"motherly\" => (object)[\"name\" => \"wide\"],\n    \"may\"      => (object)[\"name\" => \"needle\"],\n    \"sweat\"    => (object)[\"name\" => \"cake\"],\n    \"sword\"    => (object)[\"name\" => \"defend\"],\n];\n\n__::findIndex($data, static function ($object, $key, $collection) {\n    return $object->name === \"defend\";\n})\n```\n\n**Result**\n\n```\n\"pen\"\n```",
            "arguments": [
                {
                    "name": "collection",
                    "isVariadic": false,
                    "description": "an array or iterable of values to look through",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "array|iterable"
                },
                {
                    "name": "condition",
                    "isVariadic": false,
                    "description": "condition to match using either a primitive value or a callback",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "bool|\\Closure|float|int|string"
                },
                {
                    "name": "returnValue",
                    "isVariadic": false,
                    "description": "the value to return if nothing matches",
                    "defaultValue": -1,
                    "defaultValueAsString": -1,
                    "type": "int|string"
                }
            ],
            "changelog": [
                {
                    "version": "0.2.1",
                    "message": "added to bottomline"
                }
            ],
            "exceptions": [],
            "return": {
                "type": "int|string",
                "description": "<p>The index where the respective value is found. When given a numerically\nindexed array, an int will be returned but when an associative array is given, a string will\nbe returned.\nIf no value is found, <code>$returnValue</code> is returned, which defaults to <code>-1</code>.</p>"
            }
        },
        {
            "name": "findLast",
            "namespace": "collections",
            "summary": "<p>Return the last element that matches the given condition or <code>$returnValue</code> if no value is found (defaults to null).</p>",
            "summaryRaw": "Return the last element that matches the given condition or `$returnValue` if no value is found (defaults to null).",
            "description": "<p><strong>Warning</strong>: If you give this function an iterator, it will convert the iterator into an array and <em>then</em> use that\narray to find the last element; this will incur a performance hit.</p>\n<p><strong>Find by Primitive Condition in Array</strong></p>\n<pre><code class=\"language-php\">$data = [<br />\n    \"table\"    =&gt; \"trick\",<br />\n    \"pen\"      =&gt; \"defend\",<br />\n    \"motherly\" =&gt; \"wide\",<br />\n    \"may\"      =&gt; \"needle\",<br />\n    \"sweat\"    =&gt; \"cake\",<br />\n    \"sword\"    =&gt; \"defend\",<br />\n];<br />\n<br />\n__::findLast($data, \"defend\");</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>\"defend\"</code></pre>\n<p><strong>Find by Callback in an Array</strong></p>\n<pre><code class=\"language-php\">$data = [<br />\n    \"table\"    =&gt; (object)[\"name\" =&gt; \"trick\"],<br />\n    \"pen\"      =&gt; (object)[\"name\" =&gt; \"defend\"],<br />\n    \"motherly\" =&gt; (object)[\"name\" =&gt; \"wide\"],<br />\n    \"may\"      =&gt; (object)[\"name\" =&gt; \"needle\"],<br />\n    \"sweat\"    =&gt; (object)[\"name\" =&gt; \"cake\"],<br />\n    \"sword\"    =&gt; (object)[\"name\" =&gt; \"defend\"],<br />\n];<br />\n<br />\n__::findLast($data, static function ($object, $key, $collection) {<br />\n   return $object-&gt;name === \"defend\";<br />\n});</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>$data[\"sword\"]</code></pre>",
            "descriptionRaw": "**Warning**: If you give this function an iterator, it will convert the iterator into an array and _then_ use that\narray to find the last element; this will incur a performance hit.\n\n**Find by Primitive Condition in Array**\n\n```php\n$data = [\n    \"table\"    => \"trick\",\n    \"pen\"      => \"defend\",\n    \"motherly\" => \"wide\",\n    \"may\"      => \"needle\",\n    \"sweat\"    => \"cake\",\n    \"sword\"    => \"defend\",\n];\n\n__::findLast($data, \"defend\");\n```\n\n**Result**\n\n```\n\"defend\"\n```\n\n**Find by Callback in an Array**\n\n```php\n$data = [\n    \"table\"    => (object)[\"name\" => \"trick\"],\n    \"pen\"      => (object)[\"name\" => \"defend\"],\n    \"motherly\" => (object)[\"name\" => \"wide\"],\n    \"may\"      => (object)[\"name\" => \"needle\"],\n    \"sweat\"    => (object)[\"name\" => \"cake\"],\n    \"sword\"    => (object)[\"name\" => \"defend\"],\n];\n\n__::findLast($data, static function ($object, $key, $collection) {\n   return $object->name === \"defend\";\n});\n```\n\n**Result**\n\n```\n$data[\"sword\"]\n```",
            "arguments": [
                {
                    "name": "collection",
                    "isVariadic": false,
                    "description": "an array or iterable of values to look through",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "array|iterable"
                },
                {
                    "name": "condition",
                    "isVariadic": false,
                    "description": "condition to match using either a primitive value or a callback",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "bool|\\Closure|float|int|string"
                },
                {
                    "name": "returnValue",
                    "isVariadic": false,
                    "description": "the value to return if nothing matches",
                    "defaultValue": null,
                    "defaultValueAsString": "null",
                    "type": "mixed|null"
                }
            ],
            "changelog": [
                {
                    "version": "0.2.1",
                    "message": "added to bottomline"
                }
            ],
            "exceptions": [],
            "return": {
                "type": "mixed|null",
                "description": "<p>The entity from the iterable. If no value is found, <code>$returnValue</code> is returned, which defaults to\n<code>null</code>.</p>"
            }
        },
        {
            "name": "findLastEntry",
            "namespace": "collections",
            "summary": "<p>Find the last key/value pair of a given element that matches the given condition or null if no match is found.</p>",
            "summaryRaw": "Find the last key/value pair of a given element that matches the given condition or null if no match is found.",
            "description": "<p><strong>Find by Primitive Condition in Array</strong></p>\n<pre><code class=\"language-php\">$data = [<br />\n    \"table\"    =&gt; \"trick\",<br />\n    \"pen\"      =&gt; \"defend\",<br />\n    \"motherly\" =&gt; \"wide\",<br />\n    \"may\"      =&gt; \"needle\",<br />\n    \"sweat\"    =&gt; \"cake\",<br />\n    \"sword\"    =&gt; \"defend\",<br />\n];<br />\n<br />\n__::findLastEntry($data, \"defend\");</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>[\"sword\", \"defend\"]</code></pre>\n<p><strong>Find by Callback in an Array</strong></p>\n<pre><code class=\"language-php\">$data = [<br />\n    \"table\"    =&gt; (object)[\"name\" =&gt; \"trick\"],<br />\n    \"pen\"      =&gt; (object)[\"name\" =&gt; \"defend\"],<br />\n    \"motherly\" =&gt; (object)[\"name\" =&gt; \"wide\"],<br />\n    \"may\"      =&gt; (object)[\"name\" =&gt; \"needle\"],<br />\n    \"sweat\"    =&gt; (object)[\"name\" =&gt; \"cake\"],<br />\n    \"sword\"    =&gt; (object)[\"name\" =&gt; \"defend\"],<br />\n];<br />\n<br />\n__::findLastEntry($data, static function ($object, $key, $collection) {<br />\n   return $object-&gt;name === \"defend\";<br />\n});</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>[\"sword\", $data[\"sword\"]]</code></pre>",
            "descriptionRaw": "**Find by Primitive Condition in Array**\n\n```php\n$data = [\n    \"table\"    => \"trick\",\n    \"pen\"      => \"defend\",\n    \"motherly\" => \"wide\",\n    \"may\"      => \"needle\",\n    \"sweat\"    => \"cake\",\n    \"sword\"    => \"defend\",\n];\n\n__::findLastEntry($data, \"defend\");\n```\n\n**Result**\n\n```\n[\"sword\", \"defend\"]\n```\n\n**Find by Callback in an Array**\n\n```php\n$data = [\n    \"table\"    => (object)[\"name\" => \"trick\"],\n    \"pen\"      => (object)[\"name\" => \"defend\"],\n    \"motherly\" => (object)[\"name\" => \"wide\"],\n    \"may\"      => (object)[\"name\" => \"needle\"],\n    \"sweat\"    => (object)[\"name\" => \"cake\"],\n    \"sword\"    => (object)[\"name\" => \"defend\"],\n];\n\n__::findLastEntry($data, static function ($object, $key, $collection) {\n   return $object->name === \"defend\";\n});\n```\n\n**Result**\n\n```\n[\"sword\", $data[\"sword\"]]\n```",
            "arguments": [
                {
                    "name": "collection",
                    "isVariadic": false,
                    "description": "an array or iterable of values to look through",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "array|iterable"
                },
                {
                    "name": "condition",
                    "isVariadic": false,
                    "description": "condition to match using either a primitive value or a callback",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "bool|\\Closure|float|int|string"
                }
            ],
            "changelog": [
                {
                    "version": "0.2.1",
                    "message": "added to bottomline"
                }
            ],
            "exceptions": [],
            "return": {
                "type": "array|null",
                "description": "<p>An array with two values, the 0th index is the key and the 1st index is the value. Null is\nreturned if no entries can be found in the given collection.</p>"
            }
        },
        {
            "name": "findLastIndex",
            "namespace": "collections",
            "summary": "<p>Return the index or key of the <em>last</em> element that matches the given condition or <code>$returnValue</code> if no value is found\n(defaults to <code>-1</code>).</p>",
            "summaryRaw": "Return the index or key of the _last_ element that matches the given condition or `$returnValue` if no value is found\n(defaults to `-1`).",
            "description": "<p><strong>Warning</strong>: If you give this function an iterator, it will convert the iterator into an array and <em>then</em> use that\narray to find the last element; this will incur a performance hit.</p>\n<p><strong>Find Index by Primitive Condition in a Numerically Indexed Array</strong></p>\n<pre><code class=\"language-php\">$data = [<br />\n    \"native\",<br />\n    \"pale\",<br />\n    \"explain\",<br />\n    \"persuade\",<br />\n    \"elastic\",<br />\n    \"explain\",<br />\n];<br />\n<br />\n__::findIndex($data, \"explain\")</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>5</code></pre>\n<p><strong>Find Index by Primitive Condition in an Associative Array</strong></p>\n<pre><code class=\"language-php\">$data = [<br />\n    \"table\"    =&gt; \"trick\",<br />\n    \"pen\"      =&gt; \"defend\",<br />\n    \"motherly\" =&gt; \"wide\",<br />\n    \"may\"      =&gt; \"needle\",<br />\n    \"sweat\"    =&gt; \"cake\",<br />\n    \"sword\"    =&gt; \"defend\",<br />\n];<br />\n<br />\n__::findLastIndex($data, \"defend\")</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>\"sword\"</code></pre>\n<p><strong>Find by Callback Usage</strong></p>\n<pre><code class=\"language-php\">$data = [<br />\n    \"table\"    =&gt; (object)[\"name\" =&gt; \"trick\"],<br />\n    \"pen\"      =&gt; (object)[\"name\" =&gt; \"defend\"],<br />\n    \"motherly\" =&gt; (object)[\"name\" =&gt; \"wide\"],<br />\n    \"may\"      =&gt; (object)[\"name\" =&gt; \"needle\"],<br />\n    \"sweat\"    =&gt; (object)[\"name\" =&gt; \"cake\"],<br />\n    \"sword\"    =&gt; (object)[\"name\" =&gt; \"defend\"],<br />\n];<br />\n<br />\n__::findLastIndex($data, static function ($object, $key, $collection) {<br />\n    return $object-&gt;name === \"defend\";<br />\n})</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>\"sword\"</code></pre>",
            "descriptionRaw": "**Warning**: If you give this function an iterator, it will convert the iterator into an array and _then_ use that\narray to find the last element; this will incur a performance hit.\n\n**Find Index by Primitive Condition in a Numerically Indexed Array**\n\n```php\n$data = [\n    \"native\",\n    \"pale\",\n    \"explain\",\n    \"persuade\",\n    \"elastic\",\n    \"explain\",\n];\n\n__::findIndex($data, \"explain\")\n```\n\n**Result**\n\n```\n5\n```\n\n**Find Index by Primitive Condition in an Associative Array**\n\n```php\n$data = [\n    \"table\"    => \"trick\",\n    \"pen\"      => \"defend\",\n    \"motherly\" => \"wide\",\n    \"may\"      => \"needle\",\n    \"sweat\"    => \"cake\",\n    \"sword\"    => \"defend\",\n];\n\n__::findLastIndex($data, \"defend\")\n```\n\n**Result**\n\n```\n\"sword\"\n```\n\n**Find by Callback Usage**\n\n```php\n$data = [\n    \"table\"    => (object)[\"name\" => \"trick\"],\n    \"pen\"      => (object)[\"name\" => \"defend\"],\n    \"motherly\" => (object)[\"name\" => \"wide\"],\n    \"may\"      => (object)[\"name\" => \"needle\"],\n    \"sweat\"    => (object)[\"name\" => \"cake\"],\n    \"sword\"    => (object)[\"name\" => \"defend\"],\n];\n\n__::findLastIndex($data, static function ($object, $key, $collection) {\n    return $object->name === \"defend\";\n})\n```\n\n**Result**\n\n```\n\"sword\"\n```",
            "arguments": [
                {
                    "name": "collection",
                    "isVariadic": false,
                    "description": "an array or iterable of values to look through",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "array|iterable"
                },
                {
                    "name": "condition",
                    "isVariadic": false,
                    "description": "condition to match using either a primitive value or a callback",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "bool|\\Closure|float|int|string"
                },
                {
                    "name": "returnValue",
                    "isVariadic": false,
                    "description": "the value to return if nothing matches",
                    "defaultValue": -1,
                    "defaultValueAsString": -1,
                    "type": "int|string"
                }
            ],
            "changelog": [
                {
                    "version": "0.2.1",
                    "message": "added to bottomline"
                }
            ],
            "exceptions": [],
            "return": {
                "type": "int|string",
                "description": "<p>The index where the respective value is found. When given a numerically\nindexed array, an int will be returned but when an associative array is given, a string will\nbe returned.\nIf no value is found, <code>$returnValue</code> is returned, which defaults to <code>-1</code>.</p>"
            }
        },
        {
            "name": "first",
            "namespace": "collections",
            "summary": "<p>Gets the first element of an array/iterable. Passing n returns the first n elements.</p>",
            "summaryRaw": "Gets the first element of an array/iterable. Passing n returns the first n elements.",
            "description": "<p>When <code>$count</code> is <code>null</code>, only the first element will be returned.</p>\n<p><strong>Usage</strong></p>\n<pre><code class=\"language-php\">__::first([1, 2, 3, 4, 5], 2);</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>[1, 2]</code></pre>",
            "descriptionRaw": "When `$count` is `null`, only the first element will be returned.\n\n**Usage**\n\n```php\n__::first([1, 2, 3, 4, 5], 2);\n```\n\n**Result**\n\n```\n[1, 2]\n```",
            "arguments": [
                {
                    "name": "array",
                    "isVariadic": false,
                    "description": "array (or any iterable) of values",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "iterable"
                },
                {
                    "name": "count",
                    "isVariadic": false,
                    "description": "number of values to return",
                    "defaultValue": null,
                    "defaultValueAsString": "null",
                    "type": "int|null"
                }
            ],
            "changelog": [
                {
                    "version": "0.2.0",
                    "message": "added support for iterables"
                }
            ],
            "exceptions": [],
            "return": {
                "type": "array|mixed",
                "description": ""
            }
        },
        {
            "name": "get",
            "namespace": "collections",
            "summary": "<p>Get item of an array or object by index, accepting path (nested index).</p>",
            "summaryRaw": "Get item of an array or object by index, accepting path (nested index).",
            "description": "<p>If <code>$collection</code> is an object that implements the ArrayAccess interface, this\nfunction will treat it as an array instead of accessing class properties.</p>\n<p>Use a period (<code>.</code>) in <code>$path</code> to go down a level in a multidimensional array.</p>\n<p><strong>Usage</strong></p>\n<pre><code class=\"language-php\">__::get(['foo' =&gt; ['bar' =&gt; 'ter']], 'foo.bar');</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>'ter'</code></pre>",
            "descriptionRaw": "If `$collection` is an object that implements the ArrayAccess interface, this\nfunction will treat it as an array instead of accessing class properties.\n\nUse a period (`.`) in `$path` to go down a level in a multidimensional array.\n\n**Usage**\n\n```php\n__::get(['foo' => ['bar' => 'ter']], 'foo.bar');\n```\n\n**Result**\n\n```\n'ter'\n```",
            "arguments": [
                {
                    "name": "collection",
                    "isVariadic": false,
                    "description": "Array of values or object",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "array|object"
                },
                {
                    "name": "path",
                    "isVariadic": false,
                    "description": "Array key or object attribute. Use a period\nfor depicting a new level in a multidimensional\narray",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "string"
                },
                {
                    "name": "default",
                    "isVariadic": false,
                    "description": "Default value to return if index not exist",
                    "defaultValue": null,
                    "defaultValueAsString": "null",
                    "type": "mixed"
                }
            ],
            "changelog": [],
            "exceptions": [],
            "return": {
                "type": "array|mixed|null",
                "description": ""
            }
        },
        {
            "name": "getIterator",
            "namespace": "collections",
            "summary": "<p>Get an iterator from an object that supports iterators; including generators.</p>",
            "summaryRaw": "Get an iterator from an object that supports iterators; including generators.",
            "description": "",
            "descriptionRaw": "",
            "arguments": [
                {
                    "name": "input",
                    "isVariadic": false,
                    "description": "",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "\\Traversable"
                }
            ],
            "changelog": [],
            "exceptions": [
                {
                    "exception": "\\InvalidArgumentException",
                    "message": "when $input does not implement `\\Iterator` or `\\IteratorAggregate`"
                },
                {
                    "exception": "\\Exception",
                    "message": "when `\\IteratorAggregate::getIterator()` throws an exception"
                }
            ],
            "return": {
                "type": "\\Traversable",
                "description": ""
            }
        },
        {
            "name": "groupBy",
            "namespace": "collections",
            "summary": "<p>Returns an associative array where the keys are values of $key.</p>",
            "summaryRaw": "Returns an associative array where the keys are values of $key.",
            "description": "<p>Based on Chauncey McAskill's <a href=\"https://gist.github.com/mcaskill/baaee44487653e1afc0d\">array_group_by()</a>\nfunction.</p>\n<p><strong>Group by Key Usage</strong></p>\n<pre><code class=\"language-php\">__::groupBy([<br />\n        ['state' =&gt; 'IN', 'city' =&gt; 'Indianapolis', 'object' =&gt; 'School bus'],<br />\n        ['state' =&gt; 'CA', 'city' =&gt; 'San Diego', 'object' =&gt; 'Light bulb'],<br />\n        ['state' =&gt; 'CA', 'city' =&gt; 'Mountain View', 'object' =&gt; 'Space pen'],<br />\n    ],<br />\n    'state'<br />\n);</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>[<br />\n  'IN' =&gt; [<br />\n     ['state' =&gt; 'IN', 'city' =&gt; 'Indianapolis', 'object' =&gt; 'School bus'],<br />\n  ],<br />\n  'CA' =&gt; [<br />\n     ['state' =&gt; 'CA', 'city' =&gt; 'San Diego', 'object' =&gt; 'Light bulb'],<br />\n     ['state' =&gt; 'CA', 'city' =&gt; 'Mountain View', 'object' =&gt; 'Space pen'],<br />\n  ]<br />\n]</code></pre>\n<p><strong>Group by Nested Key (Dot Notation)</strong></p>\n<pre><code class=\"language-php\">__::groupBy([<br />\n        ['object' =&gt; 'School bus', 'metadata' =&gt; ['state' =&gt; 'IN', 'city' =&gt; 'Indianapolis']],<br />\n        ['object' =&gt; 'Manhole', 'metadata' =&gt; ['state' =&gt; 'IN', 'city' =&gt; 'Indianapolis']],<br />\n        ['object' =&gt; 'Basketball', 'metadata' =&gt; ['state' =&gt; 'IN', 'city' =&gt; 'Plainfield']],<br />\n        ['object' =&gt; 'Light bulb', 'metadata' =&gt; ['state' =&gt; 'CA', 'city' =&gt; 'San Diego']],<br />\n        ['object' =&gt; 'Space pen', 'metadata' =&gt; ['state' =&gt; 'CA', 'city' =&gt; 'Mountain View']],<br />\n    ],<br />\n    'metadata.state'<br />\n);</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>[<br />\n  'IN' =&gt; [<br />\n    'Indianapolis' =&gt; [<br />\n      ['object' =&gt; 'School bus', 'metadata' =&gt; ['state' =&gt; 'IN', 'city' =&gt; 'Indianapolis']],<br />\n      ['object' =&gt; 'Manhole', 'metadata' =&gt; ['state' =&gt; 'IN', 'city' =&gt; 'Indianapolis']],<br />\n    ],<br />\n    'Plainfield' =&gt; [<br />\n      ['object' =&gt; 'Basketball', 'metadata' =&gt; ['state' =&gt; 'IN', 'city' =&gt; 'Plainfield']],<br />\n    ],<br />\n  ],<br />\n  'CA' =&gt; [<br />\n    'San Diego' =&gt; [<br />\n      ['object' =&gt; 'Light bulb', 'metadata' =&gt; ['state' =&gt; 'CA', 'city' =&gt; 'San Diego']],<br />\n    ],<br />\n    'Mountain View' =&gt; [<br />\n      ['object' =&gt; 'Space pen', 'metadata' =&gt; ['state' =&gt; 'CA', 'city' =&gt; 'Mountain View']],<br />\n    ],<br />\n  ],<br />\n]</code></pre>\n<p><strong>Group by Closure Usage</strong></p>\n<pre><code class=\"language-php\">__::groupBy([<br />\n        (object)['state' =&gt; 'IN', 'city' =&gt; 'Indianapolis', 'object' =&gt; 'School bus'],<br />\n        (object)['state' =&gt; 'IN', 'city' =&gt; 'Indianapolis', 'object' =&gt; 'Manhole'],<br />\n        (object)['state' =&gt; 'CA', 'city' =&gt; 'San Diego', 'object' =&gt; 'Light bulb'],<br />\n    ],<br />\n    function ($value) {<br />\n        return $value-&gt;city;<br />\n    }<br />\n);</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>[<br />\n  'Indianapolis' =&gt; [<br />\n     ['state' =&gt; 'IN', 'city' =&gt; 'Indianapolis', 'object' =&gt; 'School bus'],<br />\n     ['state' =&gt; 'IN', 'city' =&gt; 'Indianapolis', 'object' =&gt; 'Manhole'],<br />\n  ],<br />\n  'San Diego' =&gt; [<br />\n     ['state' =&gt; 'CA', 'city' =&gt; 'San Diego', 'object' =&gt; 'Light bulb'],<br />\n  ]<br />\n]</code></pre>",
            "descriptionRaw": "Based on Chauncey McAskill's [array_group_by()](https://gist.github.com/mcaskill/baaee44487653e1afc0d)\nfunction.\n\n**Group by Key Usage**\n\n```php\n__::groupBy([\n        ['state' => 'IN', 'city' => 'Indianapolis', 'object' => 'School bus'],\n        ['state' => 'CA', 'city' => 'San Diego', 'object' => 'Light bulb'],\n        ['state' => 'CA', 'city' => 'Mountain View', 'object' => 'Space pen'],\n    ],\n    'state'\n);\n```\n\n**Result**\n\n```\n[\n  'IN' => [\n     ['state' => 'IN', 'city' => 'Indianapolis', 'object' => 'School bus'],\n  ],\n  'CA' => [\n     ['state' => 'CA', 'city' => 'San Diego', 'object' => 'Light bulb'],\n     ['state' => 'CA', 'city' => 'Mountain View', 'object' => 'Space pen'],\n  ]\n]\n```\n\n**Group by Nested Key (Dot Notation)**\n\n```php\n__::groupBy([\n        ['object' => 'School bus', 'metadata' => ['state' => 'IN', 'city' => 'Indianapolis']],\n        ['object' => 'Manhole', 'metadata' => ['state' => 'IN', 'city' => 'Indianapolis']],\n        ['object' => 'Basketball', 'metadata' => ['state' => 'IN', 'city' => 'Plainfield']],\n        ['object' => 'Light bulb', 'metadata' => ['state' => 'CA', 'city' => 'San Diego']],\n        ['object' => 'Space pen', 'metadata' => ['state' => 'CA', 'city' => 'Mountain View']],\n    ],\n    'metadata.state'\n);\n```\n\n**Result**\n\n```\n[\n  'IN' => [\n    'Indianapolis' => [\n      ['object' => 'School bus', 'metadata' => ['state' => 'IN', 'city' => 'Indianapolis']],\n      ['object' => 'Manhole', 'metadata' => ['state' => 'IN', 'city' => 'Indianapolis']],\n    ],\n    'Plainfield' => [\n      ['object' => 'Basketball', 'metadata' => ['state' => 'IN', 'city' => 'Plainfield']],\n    ],\n  ],\n  'CA' => [\n    'San Diego' => [\n      ['object' => 'Light bulb', 'metadata' => ['state' => 'CA', 'city' => 'San Diego']],\n    ],\n    'Mountain View' => [\n      ['object' => 'Space pen', 'metadata' => ['state' => 'CA', 'city' => 'Mountain View']],\n    ],\n  ],\n]\n```\n\n**Group by Closure Usage**\n\n```php\n__::groupBy([\n        (object)['state' => 'IN', 'city' => 'Indianapolis', 'object' => 'School bus'],\n        (object)['state' => 'IN', 'city' => 'Indianapolis', 'object' => 'Manhole'],\n        (object)['state' => 'CA', 'city' => 'San Diego', 'object' => 'Light bulb'],\n    ],\n    function ($value) {\n        return $value->city;\n    }\n);\n```\n\n**Result**\n\n```\n[\n  'Indianapolis' => [\n     ['state' => 'IN', 'city' => 'Indianapolis', 'object' => 'School bus'],\n     ['state' => 'IN', 'city' => 'Indianapolis', 'object' => 'Manhole'],\n  ],\n  'San Diego' => [\n     ['state' => 'CA', 'city' => 'San Diego', 'object' => 'Light bulb'],\n  ]\n]\n```",
            "arguments": [
                {
                    "name": "iterable",
                    "isVariadic": false,
                    "description": "",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "iterable"
                },
                {
                    "name": "key",
                    "isVariadic": true,
                    "description": "",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "int|float|string|\\Closure"
                }
            ],
            "changelog": [],
            "exceptions": [],
            "return": {
                "type": "array",
                "description": ""
            }
        },
        {
            "name": "has",
            "namespace": "collections",
            "summary": "<p>Return true if <code>$collection</code> contains the requested <code>$key</code>.</p>",
            "summaryRaw": "Return true if `$collection` contains the requested `$key`.",
            "description": "<p>In contrast to <code>isset()</code>, <code>__::has()</code> returns true if the key exists but is null.</p>\n<p><strong>Array Usage</strong></p>\n<pre><code class=\"language-php\"> __::has(['foo' =&gt; ['bar' =&gt; 'num'], 'foz' =&gt; 'baz'], 'foo.bar');</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>true</code></pre>\n<p><strong>Object Usage</strong></p>\n<pre><code class=\"language-php\"> __::hasKeys((object) ['foo' =&gt; 'bar', 'foz' =&gt; 'baz'], 'bar');</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>false</code></pre>",
            "descriptionRaw": "In contrast to `isset()`, `__::has()` returns true if the key exists but is null.\n\n**Array Usage**\n\n```php\n __::has(['foo' => ['bar' => 'num'], 'foz' => 'baz'], 'foo.bar');\n```\n\n**Result**\n\n```\ntrue\n```\n\n**Object Usage**\n\n```php\n __::hasKeys((object) ['foo' => 'bar', 'foz' => 'baz'], 'bar');\n```\n\n**Result**\n\n```\nfalse\n```",
            "arguments": [
                {
                    "name": "collection",
                    "isVariadic": false,
                    "description": "Array or object to search a key for",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "array|object"
                },
                {
                    "name": "path",
                    "isVariadic": false,
                    "description": "Path to look for. Supports dot notation for traversing multiple levels.",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "string|int"
                }
            ],
            "changelog": [],
            "exceptions": [],
            "return": {
                "type": "bool",
                "description": ""
            }
        },
        {
            "name": "hasKeys",
            "namespace": "collections",
            "summary": "<p>Returns true if <code>$input</code> contains all requested $keys. If <code>$strict</code> is <code>true</code>\nit also checks if <code>$input</code> exclusively contains the given <code>$keys</code>.</p>",
            "summaryRaw": "Returns true if `$input` contains all requested $keys. If `$strict` is `true`\nit also checks if `$input` exclusively contains the given `$keys`.",
            "description": "<p><strong>Usage</strong></p>\n<pre><code class=\"language-php\">__::hasKeys(['foo' =&gt; 'bar', 'foz' =&gt; 'baz'], ['foo', 'foz']);</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>true</code></pre>",
            "descriptionRaw": "**Usage**\n\n```php\n__::hasKeys(['foo' => 'bar', 'foz' => 'baz'], ['foo', 'foz']);\n```\n\n**Result**\n\n```\ntrue\n```",
            "arguments": [
                {
                    "name": "collection",
                    "isVariadic": false,
                    "description": "of key values pairs",
                    "defaultValue": [],
                    "defaultValueAsString": "[]",
                    "type": "array|\\stdClass"
                },
                {
                    "name": "keys",
                    "isVariadic": false,
                    "description": "collection of keys to look for",
                    "defaultValue": [],
                    "defaultValueAsString": "[]",
                    "type": "array"
                },
                {
                    "name": "strict",
                    "isVariadic": false,
                    "description": "to exclusively check",
                    "defaultValue": false,
                    "defaultValueAsString": "false",
                    "type": "bool"
                }
            ],
            "changelog": [],
            "exceptions": [],
            "return": {
                "type": "bool",
                "description": ""
            }
        },
        {
            "name": "isEmpty",
            "namespace": "collections",
            "summary": "<p>Check if value is an empty array or object.</p>",
            "summaryRaw": "Check if value is an empty array or object.",
            "description": "<p>We consider any non enumerable as empty.</p>\n<p><strong>Usage</strong></p>\n<pre><code class=\"language-php\">__::isEmpty([]);</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>true</code></pre>",
            "descriptionRaw": "We consider any non enumerable as empty.\n\n**Usage**\n\n```php\n__::isEmpty([]);\n```\n\n**Result**\n\n```\ntrue\n```",
            "arguments": [
                {
                    "name": "value",
                    "isVariadic": false,
                    "description": "The value to check for emptiness.",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "iterable|\\stdClass"
                }
            ],
            "changelog": [
                {
                    "version": "0.2.0",
                    "message": "added support for iterables"
                }
            ],
            "exceptions": [],
            "return": {
                "type": "bool",
                "description": ""
            }
        },
        {
            "name": "last",
            "namespace": "collections",
            "summary": "<p>Get last item(s) of an array.</p>",
            "summaryRaw": "Get last item(s) of an array.",
            "description": "<p><strong>Usage</strong></p>\n<pre><code class=\"language-php\">__::last([1, 2, 3, 4, 5], 2);</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>[4, 5]</code></pre>",
            "descriptionRaw": "**Usage**\n\n```php\n__::last([1, 2, 3, 4, 5], 2);\n```\n\n**Result**\n\n```\n[4, 5]\n```",
            "arguments": [
                {
                    "name": "iterable",
                    "isVariadic": false,
                    "description": "array of values",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "iterable"
                },
                {
                    "name": "take",
                    "isVariadic": false,
                    "description": "number of returned values",
                    "defaultValue": null,
                    "defaultValueAsString": "null",
                    "type": "int|null"
                }
            ],
            "changelog": [
                {
                    "version": "0.2.0",
                    "message": "added support for iterables"
                }
            ],
            "exceptions": [],
            "return": {
                "type": "array|mixed",
                "description": ""
            }
        },
        {
            "name": "map",
            "namespace": "collections",
            "summary": "<p>Returns an array of values by mapping each in collection through the iteratee.</p>",
            "summaryRaw": "Returns an array of values by mapping each in collection through the iteratee.",
            "description": "<p><strong>Usage</strong></p>\n<pre><code class=\"language-php\">__::map([1, 2, 3], function($value, $key, $collection) {<br />\n    return $value * 3;<br />\n});</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>[3, 6, 9]</code></pre>",
            "descriptionRaw": "**Usage**\n\n```php\n__::map([1, 2, 3], function($value, $key, $collection) {\n    return $value * 3;\n});\n```\n\n**Result**\n\n```\n[3, 6, 9]\n```",
            "arguments": [
                {
                    "name": "collection",
                    "isVariadic": false,
                    "description": "The collection of values to map over.",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "iterable|\\stdClass"
                },
                {
                    "name": "iteratee",
                    "isVariadic": false,
                    "description": "The function to apply on each value.",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "\\Closure"
                }
            ],
            "changelog": [
                {
                    "version": "0.2.0",
                    "message": "added support for iterables"
                }
            ],
            "exceptions": [],
            "return": {
                "type": "array|\\Generator",
                "description": ""
            }
        },
        {
            "name": "mapKeys",
            "namespace": "collections",
            "summary": "<p>Transforms the keys in a collection by running each key through the iterator.</p>",
            "summaryRaw": "Transforms the keys in a collection by running each key through the iterator.",
            "description": "<p>This function throws an <code>\\Exception</code> when the closure doesn't return a valid\nkey that can be used in a PHP array.</p>\n<p><strong>Usage</strong></p>\n<pre><code class=\"language-php\">__::mapKeys(['x' =&gt; 1], function($key, $value, $collection) {<br />\n    return \"{$key}_{$value}\";<br />\n});</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>['x_1' =&gt; 1]</code></pre>",
            "descriptionRaw": "This function throws an `\\Exception` when the closure doesn't return a valid\nkey that can be used in a PHP array.\n\n**Usage**\n\n```php\n__::mapKeys(['x' => 1], function($key, $value, $collection) {\n    return \"{$key}_{$value}\";\n});\n```\n\n**Result**\n\n```\n['x_1' => 1]\n```",
            "arguments": [
                {
                    "name": "iterable",
                    "isVariadic": false,
                    "description": "Array/iterable of values",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "iterable"
                },
                {
                    "name": "closure",
                    "isVariadic": false,
                    "description": "Closure to map the keys",
                    "defaultValue": null,
                    "defaultValueAsString": "null",
                    "type": "\\Closure|null"
                }
            ],
            "changelog": [
                {
                    "version": "0.2.0",
                    "message": "added support for iterables"
                }
            ],
            "exceptions": [
                {
                    "exception": "\\InvalidArgumentException",
                    "message": "when closure doesn't return a valid key that can be used in PHP array"
                }
            ],
            "return": {
                "type": "array|\\Generator",
                "description": ""
            }
        },
        {
            "name": "mapValues",
            "namespace": "collections",
            "summary": "<p>Transforms the values in a collection by running each value through the iterator.</p>",
            "summaryRaw": "Transforms the values in a collection by running each value through the iterator.",
            "description": "<p><strong>Usage</strong></p>\n<pre><code class=\"language-php\">__::mapValues(['x' =&gt; 1], function($value, $key, $collection) {<br />\n    return \"{$key}_{$value}\";<br />\n});</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>['x' =&gt; 'x_1']</code></pre>",
            "descriptionRaw": "**Usage**\n\n```php\n__::mapValues(['x' => 1], function($value, $key, $collection) {\n    return \"{$key}_{$value}\";\n});\n```\n\n**Result**\n\n```\n['x' => 'x_1']\n```",
            "arguments": [
                {
                    "name": "iterable",
                    "isVariadic": false,
                    "description": "Array of values",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "iterable"
                },
                {
                    "name": "closure",
                    "isVariadic": false,
                    "description": "Closure to map the values",
                    "defaultValue": null,
                    "defaultValueAsString": "null",
                    "type": "\\Closure|null"
                }
            ],
            "changelog": [
                {
                    "version": "0.2.0",
                    "message": "added support for iterables"
                }
            ],
            "exceptions": [],
            "return": {
                "type": "array|\\Generator",
                "description": ""
            }
        },
        {
            "name": "max",
            "namespace": "collections",
            "summary": "<p>Returns the maximum value from the collection.</p>",
            "summaryRaw": "Returns the maximum value from the collection.",
            "description": "<p>If passed an iterator, max will return max value returned by the iterator.</p>\n<p><strong>Usage</strong></p>\n<pre><code class=\"language-php\">__::max([1, 2, 3]);</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>3</code></pre>",
            "descriptionRaw": "If passed an iterator, max will return max value returned by the iterator.\n\n**Usage**\n\n```php\n__::max([1, 2, 3]);\n```\n\n**Result**\n\n```\n3\n```",
            "arguments": [
                {
                    "name": "array",
                    "isVariadic": false,
                    "description": "array",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "iterable"
                }
            ],
            "changelog": [
                {
                    "version": "0.2.0",
                    "message": "added support for iterables"
                }
            ],
            "exceptions": [],
            "return": {
                "type": "mixed",
                "description": "<p>maximum value</p>"
            }
        },
        {
            "name": "merge",
            "namespace": "collections",
            "summary": "<p>Recursively combines and merge collections provided with each others.</p>",
            "summaryRaw": "Recursively combines and merge collections provided with each others.",
            "description": "<ul>\n<li>If the collections have common keys, then the last passed keys override the previous.</li>\n<li>If numerical indexes are passed, then last passed indexes override the previous.</li>\n</ul>\n<p>For a non-recursive merge, see <code>__::assign()</code>.</p>\n<p><strong>Usage</strong></p>\n<pre><code class=\"language-php\">__::merge(<br />\n    ['color' =&gt; ['favorite' =&gt; 'red', 'model' =&gt; 3, 5], 3],<br />\n    [10, 'color' =&gt; ['favorite' =&gt; 'green', 'blue']]<br />\n);</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>['color' =&gt; ['favorite' =&gt; 'green', 'model' =&gt; 3, 'blue'], 10]</code></pre>",
            "descriptionRaw": "- If the collections have common keys, then the last passed keys override the previous.\n- If numerical indexes are passed, then last passed indexes override the previous.\n\nFor a non-recursive merge, see `__::assign()`.\n\n**Usage**\n\n```php\n__::merge(\n    ['color' => ['favorite' => 'red', 'model' => 3, 5], 3],\n    [10, 'color' => ['favorite' => 'green', 'blue']]\n);\n```\n\n**Result**\n\n```\n['color' => ['favorite' => 'green', 'model' => 3, 'blue'], 10]\n```",
            "arguments": [
                {
                    "name": "_",
                    "isVariadic": true,
                    "description": "Collections to merge.",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "iterable|\\stdClass"
                }
            ],
            "changelog": [],
            "exceptions": [],
            "return": {
                "type": "array|object",
                "description": "<p>Concatenated collection.</p>"
            }
        },
        {
            "name": "min",
            "namespace": "collections",
            "summary": "<p>Returns the minimum value from the collection. If passed an iterator, min will\nreturn min value returned by the iterator.</p>",
            "summaryRaw": "Returns the minimum value from the collection. If passed an iterator, min will\nreturn min value returned by the iterator.",
            "description": "<p><strong>Usage</strong></p>\n<pre><code class=\"language-php\">__::min([1, 2, 3]);</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>1</code></pre>",
            "descriptionRaw": "**Usage**\n\n```php\n__::min([1, 2, 3]);\n```\n\n**Result**\n\n```\n1\n```",
            "arguments": [
                {
                    "name": "array",
                    "isVariadic": false,
                    "description": "array of values",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "iterable"
                }
            ],
            "changelog": [
                {
                    "version": "0.2.0",
                    "message": "added support for iterables"
                }
            ],
            "exceptions": [],
            "return": {
                "type": "mixed",
                "description": ""
            }
        },
        {
            "name": "pick",
            "namespace": "collections",
            "summary": "<p>Returns an array having only keys present in the given path list.</p>",
            "summaryRaw": "Returns an array having only keys present in the given path list.",
            "description": "<p>Values for missing keys values will be filled with provided default value.</p>\n<p><strong>Usage</strong></p>\n<pre><code class=\"language-php\">__::pick(<br />\n    [<br />\n        'a' =&gt; 1,<br />\n        'b' =&gt; ['c' =&gt; 3, 'd' =&gt; 4]<br />\n    ],<br />\n    ['a', 'b.d']<br />\n);</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>[<br />\n    'a' =&gt; 1,<br />\n    'b' =&gt; ['d' =&gt; 4]<br />\n]</code></pre>",
            "descriptionRaw": "Values for missing keys values will be filled with provided default value.\n\n**Usage**\n\n```php\n__::pick(\n    [\n        'a' => 1,\n        'b' => ['c' => 3, 'd' => 4]\n    ],\n    ['a', 'b.d']\n);\n```\n\n**Result**\n\n```\n[\n    'a' => 1,\n    'b' => ['d' => 4]\n]\n```",
            "arguments": [
                {
                    "name": "collection",
                    "isVariadic": false,
                    "description": "The collection to iterate over.",
                    "defaultValue": [],
                    "defaultValueAsString": "[]",
                    "type": "iterable|\\stdClass"
                },
                {
                    "name": "paths",
                    "isVariadic": false,
                    "description": "Array paths to pick",
                    "defaultValue": [],
                    "defaultValueAsString": "[]",
                    "type": "array"
                },
                {
                    "name": "default",
                    "isVariadic": false,
                    "description": "The default value that will be used if the specified path does not exist.",
                    "defaultValue": null,
                    "defaultValueAsString": "null",
                    "type": "mixed"
                }
            ],
            "changelog": [
                {
                    "version": "0.2.0",
                    "message": "added support for iterables"
                }
            ],
            "exceptions": [],
            "return": {
                "type": "array",
                "description": ""
            }
        },
        {
            "name": "pluck",
            "namespace": "collections",
            "summary": "<p>Returns an array of values belonging to a given property of each item in a collection.</p>",
            "summaryRaw": "Returns an array of values belonging to a given property of each item in a collection.",
            "description": "<p><strong>Usage</strong></p>\n<pre><code class=\"language-php\">$a = [<br />\n    ['foo' =&gt; 'bar',  'bis' =&gt; 'ter' ],<br />\n    ['foo' =&gt; 'bar2', 'bis' =&gt; 'ter2'],<br />\n];<br />\n<br />\n__::pluck($a, 'foo');</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>['bar', 'bar2']</code></pre>",
            "descriptionRaw": "**Usage**\n\n```php\n$a = [\n    ['foo' => 'bar',  'bis' => 'ter' ],\n    ['foo' => 'bar2', 'bis' => 'ter2'],\n];\n\n__::pluck($a, 'foo');\n```\n\n**Result**\n\n```\n['bar', 'bar2']\n```",
            "arguments": [
                {
                    "name": "collection",
                    "isVariadic": false,
                    "description": "Array or object that can be converted to array",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "iterable|\\stdClass"
                },
                {
                    "name": "property",
                    "isVariadic": false,
                    "description": "property name",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "string"
                }
            ],
            "changelog": [
                {
                    "version": "0.2.0",
                    "message": "added support for iterables"
                }
            ],
            "exceptions": [],
            "return": {
                "type": "array",
                "description": ""
            }
        },
        {
            "name": "reduce",
            "namespace": "collections",
            "summary": "<p>Reduces <code>$collection</code> to a value which is the $accumulator result of running\neach element in <code>$collection</code> thru <code>$iteratee</code>, where each successive invocation\nis supplied the return value of the previous.</p>",
            "summaryRaw": "Reduces `$collection` to a value which is the $accumulator result of running\neach element in `$collection` thru `$iteratee`, where each successive invocation\nis supplied the return value of the previous.",
            "description": "<p>If <code>$accumulator</code> is not given, the first element of <code>$collection</code> is used as\nthe initial value.</p>\n<p><strong>Usage: Sum Example</strong></p>\n<pre><code class=\"language-php\">__::reduce([1, 2], function ($accumulator, $value, $key, $collection) {<br />\n    return $accumulator + $value;<br />\n}, 0);</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>3</code></pre>\n<p><strong>Usage: Array Counter</strong></p>\n<pre><code class=\"language-php\">$a = [<br />\n    ['state' =&gt; 'IN', 'city' =&gt; 'Indianapolis', 'object' =&gt; 'School bus'],<br />\n    ['state' =&gt; 'IN', 'city' =&gt; 'Indianapolis', 'object' =&gt; 'Manhole'],<br />\n    ['state' =&gt; 'IN', 'city' =&gt; 'Plainfield', 'object' =&gt; 'Basketball'],<br />\n    ['state' =&gt; 'CA', 'city' =&gt; 'San Diego', 'object' =&gt; 'Light bulb'],<br />\n    ['state' =&gt; 'CA', 'city' =&gt; 'Mountain View', 'object' =&gt; 'Space pen'],<br />\n];<br />\n<br />\n$iteratee = function ($accumulator, $value) {<br />\n    if (isset($accumulator[$value['city']]))<br />\n        $accumulator[$value['city']]++;<br />\n    else<br />\n        $accumulator[$value['city']] = 1;<br />\n    return $accumulator;<br />\n};<br />\n<br />\n__::reduce($c, $iteratee, []);</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>[<br />\n   'Indianapolis' =&gt; 2,<br />\n   'Plainfield' =&gt; 1,<br />\n   'San Diego' =&gt; 1,<br />\n   'Mountain View' =&gt; 1,<br />\n]</code></pre>\n<p><strong>Usage: Objects</strong></p>\n<pre><code class=\"language-php\">$object = new \\stdClass();<br />\n$object-&gt;a = 1;<br />\n$object-&gt;b = 2;<br />\n$object-&gt;c = 1;<br />\n<br />\n__::reduce($object, function ($result, $value, $key) {<br />\n    if (!isset($result[$value]))<br />\n        $result[$value] = [];<br />\n<br />\n    $result[$value][] = $key;<br />\n<br />\n    return $result;<br />\n}, [])</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>[<br />\n    '1' =&gt; ['a', 'c'],<br />\n    '2' =&gt; ['b']<br />\n]</code></pre>",
            "descriptionRaw": "If `$accumulator` is not given, the first element of `$collection` is used as\nthe initial value.\n\n**Usage: Sum Example**\n\n```php\n__::reduce([1, 2], function ($accumulator, $value, $key, $collection) {\n    return $accumulator + $value;\n}, 0);\n```\n\n**Result**\n\n```\n3\n```\n\n**Usage: Array Counter**\n\n```php\n$a = [\n    ['state' => 'IN', 'city' => 'Indianapolis', 'object' => 'School bus'],\n    ['state' => 'IN', 'city' => 'Indianapolis', 'object' => 'Manhole'],\n    ['state' => 'IN', 'city' => 'Plainfield', 'object' => 'Basketball'],\n    ['state' => 'CA', 'city' => 'San Diego', 'object' => 'Light bulb'],\n    ['state' => 'CA', 'city' => 'Mountain View', 'object' => 'Space pen'],\n];\n\n$iteratee = function ($accumulator, $value) {\n    if (isset($accumulator[$value['city']]))\n        $accumulator[$value['city']]++;\n    else\n        $accumulator[$value['city']] = 1;\n    return $accumulator;\n};\n\n__::reduce($c, $iteratee, []);\n```\n\n**Result**\n\n```\n[\n   'Indianapolis' => 2,\n   'Plainfield' => 1,\n   'San Diego' => 1,\n   'Mountain View' => 1,\n]\n```\n\n**Usage: Objects**\n\n```php\n$object = new \\stdClass();\n$object->a = 1;\n$object->b = 2;\n$object->c = 1;\n\n__::reduce($object, function ($result, $value, $key) {\n    if (!isset($result[$value]))\n        $result[$value] = [];\n\n    $result[$value][] = $key;\n\n    return $result;\n}, [])\n```\n\n**Result**\n\n```\n[\n    '1' => ['a', 'c'],\n    '2' => ['b']\n]\n```",
            "arguments": [
                {
                    "name": "collection",
                    "isVariadic": false,
                    "description": "The collection to iterate over.",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "iterable|\\stdClass"
                },
                {
                    "name": "iteratee",
                    "isVariadic": false,
                    "description": "The function invoked per iteration.",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "\\Closure"
                },
                {
                    "name": "accumulator",
                    "isVariadic": false,
                    "description": "The initial value.",
                    "defaultValue": null,
                    "defaultValueAsString": "null",
                    "type": "array|\\stdClass|mixed"
                }
            ],
            "changelog": [
                {
                    "version": "0.2.0",
                    "message": "added support for iterables"
                }
            ],
            "exceptions": [],
            "return": {
                "type": "array|\\stdClass|mixed",
                "description": "<p>Returns the accumulated value.</p>"
            }
        },
        {
            "name": "reduceRight",
            "namespace": "collections",
            "summary": "<p>Reduces <code>$collection</code> to a value which is the <code>$accumulator</code> result of running\neach element in <code>$collection</code> - from right to left - thru <code>$iteratee</code>, where\neach successive invocation is supplied the return value of the previous.</p>",
            "summaryRaw": "Reduces `$collection` to a value which is the `$accumulator` result of running\neach element in `$collection` - from right to left - thru `$iteratee`, where\neach successive invocation is supplied the return value of the previous.",
            "description": "<p>If <code>$accumulator</code> is not given, the first element of $collection is used as\nthe initial value.</p>\n<p><strong>Usage</strong></p>\n<pre><code class=\"language-php\">__::reduceRight(['a', 'b', 'c'], function ($accumulator, $value, $key, $collection) {<br />\n    return $accumulator . $value;<br />\n}, '');</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>'cba'</code></pre>",
            "descriptionRaw": "If `$accumulator` is not given, the first element of $collection is used as\nthe initial value.\n\n**Usage**\n\n```php\n__::reduceRight(['a', 'b', 'c'], function ($accumulator, $value, $key, $collection) {\n    return $accumulator . $value;\n}, '');\n```\n\n**Result**\n\n```\n'cba'\n```",
            "arguments": [
                {
                    "name": "collection",
                    "isVariadic": false,
                    "description": "The collection to iterate over.",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "iterable|\\stdClass"
                },
                {
                    "name": "iteratee",
                    "isVariadic": false,
                    "description": "The function invoked per iteration.",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "\\Closure"
                },
                {
                    "name": "accumulator",
                    "isVariadic": false,
                    "description": "The initial value.",
                    "defaultValue": null,
                    "defaultValueAsString": "null",
                    "type": "array|\\stdClass|mixed"
                }
            ],
            "changelog": [
                {
                    "version": "0.2.0",
                    "message": "added support for iterables"
                }
            ],
            "exceptions": [],
            "return": {
                "type": "array|\\stdClass|mixed",
                "description": "<p>Returns the accumulated value.</p>"
            }
        },
        {
            "name": "reverseIterable",
            "namespace": "collections",
            "summary": "<p>Return the reverse of an array or other foreach-able (Iterable).</p>",
            "summaryRaw": "Return the reverse of an array or other foreach-able (Iterable).",
            "description": "<p>For array it does not make a copy of it; but does make a copy to memory for other\ntraversables.</p>\n<p>Code (using <code>yield</code>) is from mpen and linepogl\nSee <a href=\"https://stackoverflow.com/a/36605605/1956471\">https://stackoverflow.com/a/36605605/1956471</a></p>\n<p><strong>Usage</strong></p>\n<pre><code class=\"language-php\">__::reverseIterable([1, 2, 3]);</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>Generator([3, 2, 1])</code></pre>",
            "descriptionRaw": "For array it does not make a copy of it; but does make a copy to memory for other\ntraversables.\n\nCode (using `yield`) is from mpen and linepogl\nSee https://stackoverflow.com/a/36605605/1956471\n\n**Usage**\n\n```php\n__::reverseIterable([1, 2, 3]);\n```\n\n**Result**\n\n```\nGenerator([3, 2, 1])\n```",
            "arguments": [
                {
                    "name": "iterable",
                    "isVariadic": false,
                    "description": "",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "iterable"
                }
            ],
            "changelog": [
                {
                    "version": "0.2.0",
                    "message": "added support for iterables"
                }
            ],
            "exceptions": [],
            "return": {
                "type": "\\Generator",
                "description": ""
            }
        },
        {
            "name": "set",
            "namespace": "collections",
            "summary": "<p>Return a new collection with the item set at index to given value. Index can\nbe a path of nested indexes.</p>",
            "summaryRaw": "Return a new collection with the item set at index to given value. Index can\nbe a path of nested indexes.",
            "description": "<ul>\n<li>If <code>$collection</code> is an object that implements the ArrayAccess interface,\nthis function will treat it as an array.</li>\n<li>If a portion of path doesn't exist, it's created. Arrays are created for\nmissing index in an array; objects are created for missing property in an\nobject.</li>\n</ul>\n<p>This function throws an <code>\\Exception</code> if the path consists of a non-collection.</p>\n<p><strong>Usage</strong></p>\n<pre><code class=\"language-php\">__::set(['foo' =&gt; ['bar' =&gt; 'ter']], 'foo.baz.ber', 'fer');</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>['foo' =&gt; ['bar' =&gt; 'ter', 'baz' =&gt; ['ber' =&gt; 'fer']]]</code></pre>",
            "descriptionRaw": "- If `$collection` is an object that implements the ArrayAccess interface,\n  this function will treat it as an array.\n- If a portion of path doesn't exist, it's created. Arrays are created for\n  missing index in an array; objects are created for missing property in an\n  object.\n\nThis function throws an `\\Exception` if the path consists of a non-collection.\n\n**Usage**\n\n```php\n__::set(['foo' => ['bar' => 'ter']], 'foo.baz.ber', 'fer');\n```\n\n**Result**\n\n```\n['foo' => ['bar' => 'ter', 'baz' => ['ber' => 'fer']]]\n```",
            "arguments": [
                {
                    "name": "collection",
                    "isVariadic": false,
                    "description": "Collection of values",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "array|iterable|object"
                },
                {
                    "name": "path",
                    "isVariadic": false,
                    "description": "Key or index. Supports dot notation",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "string"
                },
                {
                    "name": "value",
                    "isVariadic": false,
                    "description": "The value to set at position $key",
                    "defaultValue": null,
                    "defaultValueAsString": "null",
                    "type": "mixed"
                }
            ],
            "changelog": [],
            "exceptions": [
                {
                    "exception": "\\Exception",
                    "message": "if the path consists of a non collection"
                }
            ],
            "return": {
                "type": "array|object",
                "description": "<p>the new collection with the item set</p>"
            }
        },
        {
            "name": "size",
            "namespace": "collections",
            "summary": "<p>Get the size of an array or \\Countable object. Or get the number of properties\nan object has.</p>",
            "summaryRaw": "Get the size of an array or \\Countable object. Or get the number of properties\nan object has.",
            "description": "<p><strong>Usage</strong></p>\n<pre><code class=\"language-php\">__::size(null)                    // false<br />\n__::size(\"true\")                  // false; a string is not a collection<br />\n__::size([1, 2, 3])               // 3<br />\n__::size((object)[1, 2])          // 2<br />\n__::size(new ArrayIterator(5, 4)) // 2</code></pre>",
            "descriptionRaw": "**Usage**\n\n```php\n__::size(null)                    // false\n__::size(\"true\")                  // false; a string is not a collection\n__::size([1, 2, 3])               // 3\n__::size((object)[1, 2])          // 2\n__::size(new ArrayIterator(5, 4)) // 2\n```",
            "arguments": [
                {
                    "name": "value",
                    "isVariadic": false,
                    "description": "",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "mixed"
                }
            ],
            "changelog": [
                {
                    "version": "0.2.0",
                    "message": ""
                }
            ],
            "exceptions": [],
            "return": {
                "type": "int|false",
                "description": "<p>False when the given object does not support getting its\nsize.</p>"
            }
        },
        {
            "name": "unease",
            "namespace": "collections",
            "summary": "<p>Builds a multidimensional collection out of a hash map using the key as\nindicator where to put the value.</p>",
            "summaryRaw": "Builds a multidimensional collection out of a hash map using the key as\nindicator where to put the value.",
            "description": "<p><strong>Usage</strong></p>\n<pre><code class=\"language-php\">__::unease(['foo.bar' =&gt; 'ter', 'baz.0' =&gt; 'b', , 'baz.1' =&gt; 'z']);</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>['foo' =&gt; ['bar' =&gt; 'ter'], 'baz' =&gt; ['b', 'z']]</code></pre>",
            "descriptionRaw": "**Usage**\n\n```php\n__::unease(['foo.bar' => 'ter', 'baz.0' => 'b', , 'baz.1' => 'z']);\n```\n\n**Result**\n\n```\n['foo' => ['bar' => 'ter'], 'baz' => ['b', 'z']]\n```",
            "arguments": [
                {
                    "name": "collection",
                    "isVariadic": false,
                    "description": "Hash map of values",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "iterable|\\stdClass"
                },
                {
                    "name": "separator",
                    "isVariadic": false,
                    "description": "The glue used in the keys",
                    "defaultValue": ".",
                    "defaultValueAsString": "'.'",
                    "type": "string"
                }
            ],
            "changelog": [
                {
                    "version": "0.2.0",
                    "message": "added support for iterables"
                }
            ],
            "exceptions": [],
            "return": {
                "type": "array",
                "description": ""
            }
        },
        {
            "name": "where",
            "namespace": "collections",
            "summary": "<p>Return data matching specific key value condition.</p>",
            "summaryRaw": "Return data matching specific key value condition.",
            "description": "<p><strong>Usage</strong></p>\n<pre><code class=\"language-php\">$a = [<br />\n    ['name' =&gt; 'fred',   'age' =&gt; 32],<br />\n    ['name' =&gt; 'maciej', 'age' =&gt; 16]<br />\n];<br />\n<br />\n__::where($a, ['age' =&gt; 16]);</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>[['name' =&gt; 'maciej', 'age' =&gt; 16]]</code></pre>",
            "descriptionRaw": "**Usage**\n\n```php\n$a = [\n    ['name' => 'fred',   'age' => 32],\n    ['name' => 'maciej', 'age' => 16]\n];\n\n__::where($a, ['age' => 16]);\n```\n\n**Result**\n\n```\n[['name' => 'maciej', 'age' => 16]]\n```",
            "arguments": [
                {
                    "name": "array",
                    "isVariadic": false,
                    "description": "array of values",
                    "defaultValue": [],
                    "defaultValueAsString": "[]",
                    "type": "array|iterable"
                },
                {
                    "name": "cond",
                    "isVariadic": false,
                    "description": "condition in format of ['KEY'=>'VALUE']",
                    "defaultValue": [],
                    "defaultValueAsString": "[]",
                    "type": "array"
                }
            ],
            "changelog": [],
            "exceptions": [],
            "return": {
                "type": "array",
                "description": ""
            }
        },
        {
            "name": "slug",
            "namespace": "functions",
            "summary": "<p>Create a web friendly URL slug from a string.</p>",
            "summaryRaw": "Create a web friendly URL slug from a string.",
            "description": "<p>Although supported, transliteration is discouraged because:</p>\n<ol>\n<li>most web browsers support UTF-8 characters in URLs</li>\n<li>transliteration causes a loss of information</li>\n</ol>\n<p><strong>Usage</strong></p>\n<pre><code class=\"language-php\">__::slug('Jakieś zdanie z dużą ilością obcych znaków!');</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>'jakies-zdanie-z-duza-iloscia-obcych-znakow'</code></pre>",
            "descriptionRaw": "Although supported, transliteration is discouraged because:\n\n1. most web browsers support UTF-8 characters in URLs\n2. transliteration causes a loss of information\n\n**Usage**\n\n```php\n__::slug('Jakieś zdanie z dużą ilością obcych znaków!');\n```\n\n**Result**\n\n```\n'jakies-zdanie-z-duza-iloscia-obcych-znakow'\n```",
            "arguments": [
                {
                    "name": "str",
                    "isVariadic": false,
                    "description": "string to generate slug from",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "string"
                },
                {
                    "name": "options",
                    "isVariadic": false,
                    "description": "method options which includes: delimiter, limit, lowercase, replacements, transliterate",
                    "defaultValue": [],
                    "defaultValueAsString": "[]",
                    "type": "array"
                }
            ],
            "changelog": [],
            "exceptions": [],
            "return": {
                "type": "string",
                "description": ""
            }
        },
        {
            "name": "truncate",
            "namespace": "functions",
            "summary": "<p>Truncate string based on count of words</p>",
            "summaryRaw": "Truncate string based on count of words",
            "description": "<p><strong>Usage</strong></p>\n<pre><code class=\"language-php\">$string = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque et mi orci.';<br />\n<br />\n__::truncate($string);</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>'Lorem ipsum dolor sit amet, ...'</code></pre>",
            "descriptionRaw": "**Usage**\n\n```php\n$string = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque et mi orci.';\n\n__::truncate($string);\n```\n\n**Result**\n\n```\n'Lorem ipsum dolor sit amet, ...'\n```",
            "arguments": [
                {
                    "name": "text",
                    "isVariadic": false,
                    "description": "text to truncate",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "string"
                },
                {
                    "name": "limit",
                    "isVariadic": false,
                    "description": "limit of words",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "int"
                }
            ],
            "changelog": [],
            "exceptions": [],
            "return": {
                "type": "string",
                "description": ""
            }
        },
        {
            "name": "urlify",
            "namespace": "functions",
            "summary": "<p>Convert any URLs into HTML anchor tags in a string.</p>",
            "summaryRaw": "Convert any URLs into HTML anchor tags in a string.",
            "description": "<p><strong>Usage</strong></p>\n<pre><code class=\"language-php\">__::urlify(\"I love https://google.com\");</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>'I love &lt;a href=\"https://google.com\"&gt;google.com&lt;/a&gt;'</code></pre>",
            "descriptionRaw": "**Usage**\n\n```php\n__::urlify(\"I love https://google.com\");\n```\n\n**Result**\n\n```\n'I love <a href=\"https://google.com\">google.com</a>'\n```",
            "arguments": [
                {
                    "name": "string",
                    "isVariadic": false,
                    "description": "",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "string"
                }
            ],
            "changelog": [],
            "exceptions": [],
            "return": {
                "type": "string",
                "description": ""
            }
        },
        {
            "name": "isArray",
            "namespace": "objects",
            "summary": "<p>Check if give value is array or not.</p>",
            "summaryRaw": "Check if give value is array or not.",
            "description": "",
            "descriptionRaw": "",
            "arguments": [
                {
                    "name": "var",
                    "isVariadic": false,
                    "description": "",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "mixed"
                }
            ],
            "changelog": [],
            "exceptions": [],
            "return": {
                "type": "bool",
                "description": ""
            }
        },
        {
            "name": "isCollection",
            "namespace": "objects",
            "summary": "<p>Check if the object is a collection.</p>",
            "summaryRaw": "Check if the object is a collection.",
            "description": "<p>A collection is either an array or an object.</p>",
            "descriptionRaw": "A collection is either an array or an object.",
            "arguments": [
                {
                    "name": "object",
                    "isVariadic": false,
                    "description": "",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "mixed"
                }
            ],
            "changelog": [],
            "exceptions": [],
            "return": {
                "type": "bool",
                "description": ""
            }
        },
        {
            "name": "isEmail",
            "namespace": "objects",
            "summary": "<p>Check if the value is valid email.</p>",
            "summaryRaw": "Check if the value is valid email.",
            "description": "",
            "descriptionRaw": "",
            "arguments": [
                {
                    "name": "value",
                    "isVariadic": false,
                    "description": "",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "mixed"
                }
            ],
            "changelog": [],
            "exceptions": [],
            "return": {
                "type": "bool",
                "description": ""
            }
        },
        {
            "name": "isEqual",
            "namespace": "objects",
            "summary": "<p>Check if the objects are equals.</p>",
            "summaryRaw": "Check if the objects are equals.",
            "description": "<p>Perform a deep (recursive) comparison when the parameters are arrays or objects.</p>\n<p>Note: This method supports comparing arrays, object objects, booleans, numbers, strings.\nobject objects are compared by their own enumerable properties (as returned by get_object_vars).</p>\n<p><strong>Usage</strong></p>\n<pre><code class=\"language-php\">__::isEqual(['honfleur' =&gt; 1, 'rungis' =&gt; [2, 3]], ['honfleur' =&gt; 1, 'rungis' =&gt; [1, 2]]);</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>false</code></pre>",
            "descriptionRaw": "Perform a deep (recursive) comparison when the parameters are arrays or objects.\n\nNote: This method supports comparing arrays, object objects, booleans, numbers, strings.\nobject objects are compared by their own enumerable properties (as returned by get_object_vars).\n\n**Usage**\n\n```php\n__::isEqual(['honfleur' => 1, 'rungis' => [2, 3]], ['honfleur' => 1, 'rungis' => [1, 2]]);\n```\n\n**Result**\n\n```\nfalse\n```",
            "arguments": [
                {
                    "name": "object1",
                    "isVariadic": false,
                    "description": "",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "mixed"
                },
                {
                    "name": "object2",
                    "isVariadic": false,
                    "description": "",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "mixed"
                }
            ],
            "changelog": [],
            "exceptions": [],
            "return": {
                "type": "bool",
                "description": ""
            }
        },
        {
            "name": "isFunction",
            "namespace": "objects",
            "summary": "<p>Check if give value is function or not.</p>",
            "summaryRaw": "Check if give value is function or not.",
            "description": "",
            "descriptionRaw": "",
            "arguments": [
                {
                    "name": "var",
                    "isVariadic": false,
                    "description": "",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "mixed"
                }
            ],
            "changelog": [],
            "exceptions": [],
            "return": {
                "type": "bool",
                "description": ""
            }
        },
        {
            "name": "isIterable",
            "namespace": "objects",
            "summary": "<p>Check to see if something is iterable.</p>",
            "summaryRaw": "Check to see if something is iterable.",
            "description": "",
            "descriptionRaw": "",
            "arguments": [
                {
                    "name": "value",
                    "isVariadic": false,
                    "description": "",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "mixed"
                },
                {
                    "name": "strict",
                    "isVariadic": false,
                    "description": "Match PHP 7.1 behavior where and `\\stdClass` is not iterable",
                    "defaultValue": true,
                    "defaultValueAsString": "true",
                    "type": "bool"
                }
            ],
            "changelog": [],
            "exceptions": [],
            "return": {
                "type": "bool",
                "description": ""
            }
        },
        {
            "name": "isNull",
            "namespace": "objects",
            "summary": "<p>Check if give value is null or not.</p>",
            "summaryRaw": "Check if give value is null or not.",
            "description": "",
            "descriptionRaw": "",
            "arguments": [
                {
                    "name": "var",
                    "isVariadic": false,
                    "description": "",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "mixed"
                }
            ],
            "changelog": [],
            "exceptions": [],
            "return": {
                "type": "bool",
                "description": ""
            }
        },
        {
            "name": "isNumber",
            "namespace": "objects",
            "summary": "<p>Check if give value is number or not.</p>",
            "summaryRaw": "Check if give value is number or not.",
            "description": "",
            "descriptionRaw": "",
            "arguments": [
                {
                    "name": "value",
                    "isVariadic": false,
                    "description": "",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "mixed"
                }
            ],
            "changelog": [],
            "exceptions": [],
            "return": {
                "type": "bool",
                "description": ""
            }
        },
        {
            "name": "isObject",
            "namespace": "objects",
            "summary": "<p>Check if give value is object or not.</p>",
            "summaryRaw": "Check if give value is object or not.",
            "description": "",
            "descriptionRaw": "",
            "arguments": [
                {
                    "name": "var",
                    "isVariadic": false,
                    "description": "",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "mixed"
                }
            ],
            "changelog": [],
            "exceptions": [],
            "return": {
                "type": "bool",
                "description": ""
            }
        },
        {
            "name": "isString",
            "namespace": "objects",
            "summary": "<p>Check if give value is string or not.</p>",
            "summaryRaw": "Check if give value is string or not.",
            "description": "",
            "descriptionRaw": "",
            "arguments": [
                {
                    "name": "var",
                    "isVariadic": false,
                    "description": "",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "mixed"
                }
            ],
            "changelog": [],
            "exceptions": [],
            "return": {
                "type": "bool",
                "description": ""
            }
        },
        {
            "name": "chain",
            "namespace": "sequences",
            "summary": "<p>Returns a wrapper instance, allows the value to be passed through multiple\nbottomline functions.</p>",
            "summaryRaw": "Returns a wrapper instance, allows the value to be passed through multiple\nbottomline functions.",
            "description": "<p><strong>Usage</strong></p>\n<pre><code class=\"language-php\">__::chain([0, 1, 2, 3, null])<br />\n    -&gt;compact()<br />\n    -&gt;prepend(4)<br />\n    -&gt;value()<br />\n;</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>[4, 1, 2, 3]</code></pre>",
            "descriptionRaw": "**Usage**\n\n```php\n__::chain([0, 1, 2, 3, null])\n    ->compact()\n    ->prepend(4)\n    ->value()\n;\n```\n\n**Result**\n\n```\n[4, 1, 2, 3]\n```",
            "arguments": [
                {
                    "name": "initialValue",
                    "isVariadic": false,
                    "description": "",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "mixed"
                }
            ],
            "changelog": [],
            "exceptions": [],
            "return": {
                "type": "\\BottomlineWrapper",
                "description": ""
            }
        },
        {
            "name": "camelCase",
            "namespace": "strings",
            "summary": "<p>Converts string to <a href=\"https://en.wikipedia.org/wiki/CamelCase\">camel case</a>.</p>",
            "summaryRaw": "Converts string to [camel case](https://en.wikipedia.org/wiki/CamelCase).",
            "description": "<p><strong>Usage</strong></p>\n<pre><code class=\"language-php\">__::camelCase('Foo Bar');</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>'fooBar'</code></pre>",
            "descriptionRaw": "**Usage**\n\n```php\n__::camelCase('Foo Bar');\n```\n\n**Result**\n\n```\n'fooBar'\n```",
            "arguments": [
                {
                    "name": "input",
                    "isVariadic": false,
                    "description": "",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "string"
                }
            ],
            "changelog": [],
            "exceptions": [],
            "return": {
                "type": "string",
                "description": ""
            }
        },
        {
            "name": "capitalize",
            "namespace": "strings",
            "summary": "<p>Converts the first character of string to upper case and the remaining\nto lower case.</p>",
            "summaryRaw": "Converts the first character of string to upper case and the remaining\nto lower case.",
            "description": "<p><strong>Usage</strong></p>\n<pre><code class=\"language-php\">__::capitalize('FRED');</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>'Fred'</code></pre>",
            "descriptionRaw": "**Usage**\n\n```php\n__::capitalize('FRED');\n```\n\n**Result**\n\n```\n'Fred'\n```",
            "arguments": [
                {
                    "name": "input",
                    "isVariadic": false,
                    "description": "",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "string"
                }
            ],
            "changelog": [],
            "exceptions": [],
            "return": {
                "type": "string",
                "description": ""
            }
        },
        {
            "name": "kebabCase",
            "namespace": "strings",
            "summary": "<p>Converts string to <a href=\"https://en.wikipedia.org/wiki/Letter_case#Special_case_styles\">kebab case</a>.</p>",
            "summaryRaw": "Converts string to [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).",
            "description": "<p><strong>Usage</strong></p>\n<pre><code class=\"language-php\">__::kebabCase('Foo Bar');</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>'foo-bar'</code></pre>",
            "descriptionRaw": "**Usage**\n\n```php\n__::kebabCase('Foo Bar');\n```\n\n**Result**\n\n```\n'foo-bar'\n```",
            "arguments": [
                {
                    "name": "input",
                    "isVariadic": false,
                    "description": "",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "string"
                }
            ],
            "changelog": [],
            "exceptions": [],
            "return": {
                "type": "string",
                "description": ""
            }
        },
        {
            "name": "lowerCase",
            "namespace": "strings",
            "summary": "<p>Converts string, as space separated words, to lower case.</p>",
            "summaryRaw": "Converts string, as space separated words, to lower case.",
            "description": "<p><strong>Usage</strong></p>\n<pre><code class=\"language-php\">__::lowerCase('--Foo-Bar--');</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>'foo bar'</code></pre>",
            "descriptionRaw": "**Usage**\n\n```php\n__::lowerCase('--Foo-Bar--');\n```\n\n**Result**\n\n```\n'foo bar'\n```",
            "arguments": [
                {
                    "name": "input",
                    "isVariadic": false,
                    "description": "",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "string"
                }
            ],
            "changelog": [],
            "exceptions": [],
            "return": {
                "type": "string",
                "description": ""
            }
        },
        {
            "name": "lowerFirst",
            "namespace": "strings",
            "summary": "<p>Converts the first character of string to lower case, like lcfirst.</p>",
            "summaryRaw": "Converts the first character of string to lower case, like lcfirst.",
            "description": "<p><strong>Usage</strong></p>\n<pre><code class=\"language-php\">__::lowerFirst('Fred');</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>'fred'</code></pre>",
            "descriptionRaw": "**Usage**\n\n```php\n__::lowerFirst('Fred');\n```\n\n**Result**\n\n```\n'fred'\n```",
            "arguments": [
                {
                    "name": "input",
                    "isVariadic": false,
                    "description": "",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "string"
                }
            ],
            "changelog": [],
            "exceptions": [],
            "return": {
                "type": "string",
                "description": ""
            }
        },
        {
            "name": "snakeCase",
            "namespace": "strings",
            "summary": "<p>Converts string to <a href=\"https://en.wikipedia.org/wiki/Snake_case\">snake case</a>.</p>",
            "summaryRaw": "Converts string to [snake case](https://en.wikipedia.org/wiki/Snake_case).",
            "description": "<p><strong>Usage</strong></p>\n<pre><code class=\"language-php\">__::snakeCase('Foo Bar');</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>'foo_bar'</code></pre>",
            "descriptionRaw": "**Usage**\n\n```php\n__::snakeCase('Foo Bar');\n```\n\n**Result**\n\n```\n'foo_bar'\n```",
            "arguments": [
                {
                    "name": "input",
                    "isVariadic": false,
                    "description": "",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "string"
                }
            ],
            "changelog": [],
            "exceptions": [],
            "return": {
                "type": "string",
                "description": ""
            }
        },
        {
            "name": "split",
            "namespace": "strings",
            "summary": "<p>Split a string by string.</p>",
            "summaryRaw": "Split a string by string.",
            "description": "<ul>\n<li>If limit is set and positive, the returned array will contain a\nmaximum of limit elements with the last element containing the rest\nof string.</li>\n<li>If the limit parameter is negative, all components except the last\n<code>-limit</code> are returned.</li>\n<li>If the limit parameter is zero, then this is treated as 1.</li>\n</ul>\n<p><strong>Usage</strong></p>\n<pre><code class=\"language-php\">__::split('a-b-c', '-', 2);</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>['a', 'b-c']</code></pre>",
            "descriptionRaw": "- If limit is set and positive, the returned array will contain a\n  maximum of limit elements with the last element containing the rest\n  of string.\n- If the limit parameter is negative, all components except the last\n  `-limit` are returned.\n- If the limit parameter is zero, then this is treated as 1.\n\n**Usage**\n\n```php\n__::split('a-b-c', '-', 2);\n```\n\n**Result**\n\n```\n['a', 'b-c']\n```",
            "arguments": [
                {
                    "name": "input",
                    "isVariadic": false,
                    "description": "The string to split.",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "string"
                },
                {
                    "name": "delimiter",
                    "isVariadic": false,
                    "description": "The boundary string.",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "string"
                },
                {
                    "name": "limit",
                    "isVariadic": false,
                    "description": "",
                    "defaultValue": 9223372036854775807,
                    "defaultValueAsString": 9223372036854775807,
                    "type": "int"
                }
            ],
            "changelog": [],
            "exceptions": [],
            "return": {
                "type": "string[]",
                "description": ""
            }
        },
        {
            "name": "startCase",
            "namespace": "strings",
            "summary": "<p>Converts string to <a href=\"https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage\">start case</a>.</p>",
            "summaryRaw": "Converts string to [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).",
            "description": "<p><strong>Usage</strong></p>\n<pre><code class=\"language-php\">__::startCase('--foo-bar--');</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>'Foo Bar'</code></pre>",
            "descriptionRaw": "**Usage**\n\n```php\n__::startCase('--foo-bar--');\n```\n\n**Result**\n\n```\n'Foo Bar'\n```",
            "arguments": [
                {
                    "name": "input",
                    "isVariadic": false,
                    "description": "",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "string"
                }
            ],
            "changelog": [],
            "exceptions": [],
            "return": {
                "type": "string",
                "description": ""
            }
        },
        {
            "name": "toLower",
            "namespace": "strings",
            "summary": "<p>Converts string, as a whole, to lower case just like <code>strtolower()</code>.</p>",
            "summaryRaw": "Converts string, as a whole, to lower case just like `strtolower()`.",
            "description": "<p><strong>Usage</strong></p>\n<pre><code class=\"language-php\">__::toLower('fooBar');</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>'foobar'</code></pre>",
            "descriptionRaw": "**Usage**\n\n```php\n__::toLower('fooBar');\n```\n\n**Result**\n\n```\n'foobar'\n```",
            "arguments": [
                {
                    "name": "input",
                    "isVariadic": false,
                    "description": "",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "string"
                }
            ],
            "changelog": [],
            "exceptions": [],
            "return": {
                "type": "string",
                "description": ""
            }
        },
        {
            "name": "toUpper",
            "namespace": "strings",
            "summary": "<p>Converts string, as a whole, to lower case just like <code>strtoupper()</code>.</p>",
            "summaryRaw": "Converts string, as a whole, to lower case just like `strtoupper()`.",
            "description": "<p><strong>Usage</strong></p>\n<pre><code>__::toUpper('fooBar');</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>'FOOBAR'</code></pre>",
            "descriptionRaw": "**Usage**\n\n```\n__::toUpper('fooBar');\n```\n\n**Result**\n\n```\n'FOOBAR'\n```",
            "arguments": [
                {
                    "name": "input",
                    "isVariadic": false,
                    "description": "",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "string"
                }
            ],
            "changelog": [],
            "exceptions": [],
            "return": {
                "type": "string",
                "description": ""
            }
        },
        {
            "name": "upperCase",
            "namespace": "strings",
            "summary": "<p>Converts string, as space separated words, to upper case.</p>",
            "summaryRaw": "Converts string, as space separated words, to upper case.",
            "description": "<p><strong>Usage</strong></p>\n<pre><code class=\"language-php\">__::upperCase('--foo-bar');</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>'FOO BAR'</code></pre>",
            "descriptionRaw": "**Usage**\n\n```php\n__::upperCase('--foo-bar');\n```\n\n**Result**\n\n```\n'FOO BAR'\n```",
            "arguments": [
                {
                    "name": "input",
                    "isVariadic": false,
                    "description": "",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "string"
                }
            ],
            "changelog": [],
            "exceptions": [],
            "return": {
                "type": "string",
                "description": ""
            }
        },
        {
            "name": "upperFirst",
            "namespace": "strings",
            "summary": "<p>Converts the first character of string to upper case, like <code>ucfirst()</code>.</p>",
            "summaryRaw": "Converts the first character of string to upper case, like `ucfirst()`.",
            "description": "<p><strong>Usage</strong></p>\n<pre><code class=\"language-php\">__::upperFirst('fred');</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>'Fred'</code></pre>",
            "descriptionRaw": "**Usage**\n\n```php\n__::upperFirst('fred');\n```\n\n**Result**\n\n```\n'Fred'\n```",
            "arguments": [
                {
                    "name": "input",
                    "isVariadic": false,
                    "description": "",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "string"
                }
            ],
            "changelog": [],
            "exceptions": [],
            "return": {
                "type": "string",
                "description": ""
            }
        },
        {
            "name": "words",
            "namespace": "strings",
            "summary": "<p>Splits string into an array of its words.</p>",
            "summaryRaw": "Splits string into an array of its words.",
            "description": "<p><strong>Usage: Default Behavior</strong></p>\n<pre><code class=\"language-php\">__::words('fred, barney, &amp; pebbles');</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>['fred', 'barney', 'pebbles']</code></pre>\n<p>Use a custom regex to define how words are split.</p>\n<p><strong>Usage: Custom Pattern</strong></p>\n<pre><code class=\"language-php\">__::words('fred, barney, &amp; pebbles', '/[^, ]+/');</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>['fred', 'barney', '&amp;', 'pebbles']</code></pre>",
            "descriptionRaw": "**Usage: Default Behavior**\n\n```php\n__::words('fred, barney, & pebbles');\n```\n\n**Result**\n\n```\n['fred', 'barney', 'pebbles']\n```\n\nUse a custom regex to define how words are split.\n\n**Usage: Custom Pattern**\n\n```php\n__::words('fred, barney, & pebbles', '/[^, ]+/');\n```\n\n**Result**\n\n```\n['fred', 'barney', '&', 'pebbles']\n```",
            "arguments": [
                {
                    "name": "input",
                    "isVariadic": false,
                    "description": "The string of words to split.",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "string"
                },
                {
                    "name": "pattern",
                    "isVariadic": false,
                    "description": "The regex to match words.",
                    "defaultValue": null,
                    "defaultValueAsString": "null",
                    "type": "string|null"
                }
            ],
            "changelog": [],
            "exceptions": [],
            "return": {
                "type": "string[]",
                "description": ""
            }
        },
        {
            "name": "identity",
            "namespace": "utilities",
            "summary": "<p>Returns the first argument it receives.</p>",
            "summaryRaw": "Returns the first argument it receives.",
            "description": "<p><strong>Usage</strong></p>\n<pre><code class=\"language-php\">__::identity('arg1', 'arg2');</code></pre>\n<p><strong>Result</strong></p>\n<pre><code>'arg1'</code></pre>",
            "descriptionRaw": "**Usage**\n\n```php\n__::identity('arg1', 'arg2');\n```\n\n**Result**\n\n```\n'arg1'\n```",
            "arguments": [
                {
                    "name": "_",
                    "isVariadic": true,
                    "description": "",
                    "defaultValue": null,
                    "defaultValueAsString": null,
                    "type": "mixed"
                }
            ],
            "changelog": [],
            "exceptions": [],
            "return": {
                "type": "mixed",
                "description": ""
            }
        },
        {
            "name": "now",
            "namespace": "utilities",
            "summary": "<p>Alias to original time() function which returns current time.</p>",
            "summaryRaw": "Alias to original time() function which returns current time.",
            "description": "",
            "descriptionRaw": "",
            "arguments": [],
            "changelog": [],
            "exceptions": [],
            "return": {
                "type": "mixed",
                "description": ""
            }
        }
    ]
}