در تاریخ دوشنبه ۳۱ اوت ۲۰۲۶، ۰۰:۵۸ Seifeddine Gmati
<[email protected]> نوشت:

> On Sun, 30 Aug 2026 at 15:19, ‫سپهر محمودی‬‎ <[email protected]>
> wrote:‬
> >
> > Hi everyone,
> >
> > I'd like to start the discussion for a new RFC proposing the
> `array_str_contains()` function for PHP 8.7.
>
> Hi Sepehr,
>
> > Filtering arrays based on substring matching is something many of us
> write on a regular basis, usually with boilerplate like:
> > $matches = array_filter($array, fn($item) => is_string($item) &&
> str_contains($item, $needle));
>
> I don't recall ever writing something like this. If I did, not
> remembering it suggests it isn't that common.
>
> The RFC also does not include any proof of the "regular basis", and
> under same conditions, the same case could be made for
> array_str_starts_with, array_str_ends_with, array_preg_match,
> array_str_length, and probably few more hunder combinations, I really
> don't see how `str_contains` is in any way special.
>
> The name `array_str_contains` is also confusing, it does not tell me
> what this function is doing, there is nothing indicating that it is
> filtering. `array_str_contains($arr, $str)` could mean that every
> string is joined with `$str` so by the end all string entries in
> `$arr` do contain `$str`? Idk.
>
> > Thanks,
> > Sepehr
>
> Cheers,
> Seifeddine.
>

--------
Hi Seifeddine,

Thank you for your feedback and perspective!

Regarding the use-case and frequency:
Sub-string filtering on lists of strings is a very common task across many
domains — such as autocomplete suggestions, filtering file/directory lists,
simple search filters over tag/category arrays, and processing logs or URL
lists.

While `array_filter` with a closure can achieve this, it introduces
noticeable overhead in userland due to repeated closure invocations and
type checks on every element. Implementing this natively in C provides
direct memory traversal and immediate performance gains for a very frequent
real-world operation.

Regarding other variants (`starts_with`, `ends_with`, etc.):
`str_contains` is arguably the most general and widely-used substring
operation. However, discussing whether a broader set of string-array
utilities or a more specific naming convention makes sense is exactly why
this RFC is in discussion.

Regarding the naming (`array_str_contains`):
You raise a fair point about clarity. Some developers might intuitively
expect a boolean return type (similar to `in_array` or `str_contains`) or
wonder if it acts as a filter. Alternative names like
`array_filter_contains()` or `array_grep()`-style semantics could also be
considered if the community prefers more explicit filtering terminology.

I appreciate your insights and look forward to hearing more thoughts from
the internals community on both the concept and the ideal naming.

Best regards,
Sepehr

Reply via email to