diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 010e5a6..742a10a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -30,5 +30,8 @@ jobs: - name: Run tests run: ./vendor/bin/phpunit + - name: Run static analysis + run: ./vendor/bin/phpstan analyse + - name: Verify documentation run: ./vendor/bin/mddoc --dry-run diff --git a/README.md b/README.md index dfe1640..13c67f5 100644 --- a/README.md +++ b/README.md @@ -29,29 +29,29 @@ function array_flatten(array $array, $allow_duplicates = false) ##### Parameters -- ***array*** `$array` - The Array to be Flattened +- ***array*** `$array` - The Array to be Flattened - ***bool*** `$allow_duplicates` - Should the array allow duplicates ##### Return Value -- ***array*** - The resulting array or NULL on failure +- ***array*** - The resulting array or NULL on failure Given an array, find all the values recursively. ### Function: \array_blend ```php -function array_blend(array $arrays, array $keys = null) +function array_blend(array $arrays, ?array $keys = null) ``` ##### Parameters -- ***array*** `$arrays` - An array of arrays. -- ***array*** | ***null*** `$keys` - The merged array. +- ***array*** `$arrays` - An array of arrays. +- ***array*** | ***null*** `$keys` - The merged array. ##### Return Value -- ***array*** - The resulting blended array +- ***array*** - The resulting blended array Given an array of arrays, merges the array's children together. @@ -63,12 +63,12 @@ function array_key_array(array $arrays, $key) ##### Parameters -- ***array*** `$arrays` - An array of similarly keyed arrays -- ***int*** | ***string*** `$key` - The desired key +- ***array>*** `$arrays` - An array of similarly keyed arrays +- ***array-key*** `$key` - The desired key ##### Return Value -- ***array*** - The flattened array +- ***array*** - The flattened array Given an array of similarly keyed arrays, returns an array of only the values of the key. @@ -80,12 +80,12 @@ function array_keys_array(array $arrays, $keys) ##### Parameters -- ***array*** `$arrays` - An array of similarly keyed arrays -- ***array*** | ***int*** | ***string*** `$keys` - The key or array of keys to return +- ***array>*** `$arrays` - An array of similarly keyed arrays +- ***array-key*** | ***array*** `$keys` - The key or array of keys to return ##### Return Value -- ***array*** - The array of arrays with just the selected keys +- ***array>*** - The array of arrays with just the selected keys Given an array of similarly keyed arrays, returns an array of only the selected keys. @@ -97,12 +97,12 @@ function array_key_refill(array $array, array $keys, $fill = array()) ##### Parameters -- ***array*** `$array` - A Keyed array -- ***array*** `$keys` - The keys that must exist +- ***array*** `$array` - A Keyed array +- ***array*** `$keys` - The keys that must exist - ***mixed*** `$fill` - The desired value to fill with ##### Return Value -- ***array*** +- ***array*** Given a keyed array, fills any missing values. \ No newline at end of file diff --git a/composer.json b/composer.json index f566721..b9556f0 100644 --- a/composer.json +++ b/composer.json @@ -31,6 +31,7 @@ }, "require-dev": { "donatj/mddoc": "^0.14.1", + "phpstan/phpstan": "=2.3.1", "phpunit/phpunit": "~9|~11" }, "autoload" : { diff --git a/phpstan.neon.dist b/phpstan.neon.dist new file mode 100644 index 0000000..3e639cd --- /dev/null +++ b/phpstan.neon.dist @@ -0,0 +1,4 @@ +parameters: + level: 9 + paths: + - src diff --git a/src/array.php b/src/array.php index 82f2b8b..caecd7b 100644 --- a/src/array.php +++ b/src/array.php @@ -4,9 +4,9 @@ /** * Given an array, find all the values recursively. * - * @param array $array The Array to be Flattened - * @param bool $allow_duplicates Should the array allow duplicates - * @return array The resulting array or NULL on failure + * @param array $array The Array to be Flattened + * @param bool $allow_duplicates Should the array allow duplicates + * @return array The resulting array or NULL on failure */ function array_flatten( array $array, $allow_duplicates = false ) { $it = new RecursiveIteratorIterator(new RecursiveArrayIterator($array)); @@ -14,8 +14,10 @@ function array_flatten( array $array, $allow_duplicates = false ) { foreach( $it as $v ) { if( $allow_duplicates ) { $final[] = $v; - } else { + } elseif( is_int($v) || is_string($v) ) { $final[$v] = $v; + } else { + $final[] = $v; } } @@ -27,11 +29,11 @@ function array_flatten( array $array, $allow_duplicates = false ) { /** * Given an array of arrays, merges the array's children together. * - * @param array $arrays An array of arrays. - * @param array|null $keys The merged array. - * @return array The resulting blended array + * @param array $arrays An array of arrays. + * @param array|null $keys The merged array. + * @return array The resulting blended array */ - function array_blend( array $arrays, array $keys = null ) { + function array_blend( array $arrays, ?array $keys = null ) { $out = array(); foreach( $arrays as $key => $array ) { @@ -50,9 +52,9 @@ function array_blend( array $arrays, array $keys = null ) { /** * Given an array of similarly keyed arrays, returns an array of only the values of the key. * - * @param array $arrays An array of similarly keyed arrays - * @param int|string $key The desired key - * @return array The flattened array + * @param array> $arrays An array of similarly keyed arrays + * @param array-key $key The desired key + * @return array The flattened array */ function array_key_array( array $arrays, $key ) { $out = array(); @@ -68,9 +70,9 @@ function array_key_array( array $arrays, $key ) { /** * Given an array of similarly keyed arrays, returns an array of only the selected keys. * - * @param array $arrays An array of similarly keyed arrays - * @param array|int|string $keys The key or array of keys to return - * @return array The array of arrays with just the selected keys + * @param array> $arrays An array of similarly keyed arrays + * @param array-key|array $keys The key or array of keys to return + * @return array> The array of arrays with just the selected keys */ function array_keys_array( array $arrays, $keys ) { $keys = (array)$keys; @@ -90,10 +92,10 @@ function array_keys_array( array $arrays, $keys ) { /** * Given a keyed array, fills any missing values. * - * @param array $array A Keyed array - * @param array $keys The keys that must exist + * @param array $array A Keyed array + * @param array $keys The keys that must exist * @param mixed $fill The desired value to fill with - * @return array + * @return array */ function array_key_refill( array $array, array $keys, $fill = array() ) { foreach( $keys as $key ) { diff --git a/test/ArrayFunctionsTest.php b/test/ArrayFunctionsTest.php index 010b236..52f3b23 100644 --- a/test/ArrayFunctionsTest.php +++ b/test/ArrayFunctionsTest.php @@ -34,6 +34,13 @@ public function testArrayFlatten() { ); } + public function testArrayFlattenPreservesValuesThatCannotBeArrayKeys() { + $this->assertSame( + array( true, 1.5, null ), + array_values(array_flatten(array( true, 1.5, null ))) + ); + } + public function testArrayBlend() { // Test blending arrays without specifying keys $arrays = array(