Hi internals,

Currently, array_filter will always return the original keys.
This often requires an additional wrapping call of 
array_values(array_filter(...)) to reindex the keys and return a list.
(or applications may not realize there will be gaps in the keys until it causes 
a bug or unexpected JSON encoding, etc.)

PHP is also more memory/time efficient at creating packed arrays than it is at 
creating associative arrays.

What are your thoughts on adding `ARRAY_FILTER_REINDEX`, to ignore the original 
int/string keys and replace them with `0, 1, 2, ...`

```
php > echo json_encode(array_filter([5,6,7,8], fn($value) => $value % 2 > 0));
{"0":5,"2":7}
// proposed flag
php > echo json_encode(array_filter([5,6,7,8], fn($value) => $value % 2 > 0, 
ARRAY_FILTER_REINDEX));
[5,7]
```

https://www.php.net/array_filter already has the `int $mode = 0` which accepts 
the bit flags `ARRAY_FILTER_USE_KEY` and `ARRAY_FILTER_USE_BOTH`
These could be then be combined with the proposed bit flag 
`ARRAY_FILTER_REINDEX`, e.g. to filter an array based on both the array keys 
and values, and return a list without gaps.
(and if $callback is null, this would return a list containing only the truthy 
values)

Thoughts? 

Thanks,
Tyson
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: https://www.php.net/unsub.php

Reply via email to