Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
30 changes: 15 additions & 15 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,29 +29,29 @@ function array_flatten(array $array, $allow_duplicates = false)

##### Parameters

- ***array*** `$array` - The Array to be Flattened
- ***array<array-key,mixed>*** `$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<array-key,mixed>*** - 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<array-key,mixed>*** `$arrays` - An array of arrays.
- ***array<array-key,array-key>*** | ***null*** `$keys` - The merged array.

##### Return Value

- ***array*** - The resulting blended array
- ***array<array-key,mixed>*** - The resulting blended array

Given an array of arrays, merges the array's children together.

Expand All @@ -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<array-key,array<array-key,mixed>>*** `$arrays` - An array of similarly keyed arrays
- ***array-key*** `$key` - The desired key

##### Return Value

- ***array*** - The flattened array
- ***array<array-key,mixed>*** - The flattened array

Given an array of similarly keyed arrays, returns an array of only the values of the key.

Expand All @@ -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<array-key,array<array-key,mixed>>*** `$arrays` - An array of similarly keyed arrays
- ***array-key*** | ***array<array-key,array-key>*** `$keys` - The key or array of keys to return

##### Return Value

- ***array*** - The array of arrays with just the selected keys
- ***array<array-key,array<array-key,mixed>>*** - The array of arrays with just the selected keys

Given an array of similarly keyed arrays, returns an array of only the selected keys.

Expand All @@ -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-key,mixed>*** `$array` - A Keyed array
- ***array<array-key,array-key>*** `$keys` - The keys that must exist
- ***mixed*** `$fill` - The desired value to fill with

##### Return Value

- ***array***
- ***array<array-key,mixed>***

Given a keyed array, fills any missing values.
1 change: 1 addition & 0 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
},
"require-dev": {
"donatj/mddoc": "^0.14.1",
"phpstan/phpstan": "=2.3.1",
"phpunit/phpunit": "~9|~11"
},
"autoload" : {
Expand Down
4 changes: 4 additions & 0 deletions phpstan.neon.dist
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
parameters:
level: 9
paths:
- src
36 changes: 19 additions & 17 deletions src/array.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,20 @@
/**
* 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-key, mixed> $array The Array to be Flattened
* @param bool $allow_duplicates Should the array allow duplicates
* @return array<array-key, mixed> The resulting array or NULL on failure
*/
function array_flatten( array $array, $allow_duplicates = false ) {
$it = new RecursiveIteratorIterator(new RecursiveArrayIterator($array));
$final = array();
foreach( $it as $v ) {
if( $allow_duplicates ) {
$final[] = $v;
} else {
} elseif( is_int($v) || is_string($v) ) {
$final[$v] = $v;
} else {
$final[] = $v;
}
}

Expand All @@ -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<array-key, mixed> $arrays An array of arrays.
* @param array<array-key, array-key>|null $keys The merged array.
* @return array<array-key, mixed> 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 ) {
Expand All @@ -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<array-key, array<array-key, mixed>> $arrays An array of similarly keyed arrays
* @param array-key $key The desired key
* @return array<array-key, mixed> The flattened array
*/
function array_key_array( array $arrays, $key ) {
$out = array();
Expand All @@ -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<array-key, array<array-key, mixed>> $arrays An array of similarly keyed arrays
* @param array-key|array<array-key, array-key> $keys The key or array of keys to return
* @return array<array-key, array<array-key, mixed>> The array of arrays with just the selected keys
*/
function array_keys_array( array $arrays, $keys ) {
$keys = (array)$keys;
Expand All @@ -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-key, mixed> $array A Keyed array
* @param array<array-key, array-key> $keys The keys that must exist
* @param mixed $fill The desired value to fill with
* @return array
* @return array<array-key, mixed>
*/
function array_key_refill( array $array, array $keys, $fill = array() ) {
foreach( $keys as $key ) {
Expand Down
7 changes: 7 additions & 0 deletions test/ArrayFunctionsTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down
Loading