در تاریخ دوشنبه ۳۱ اوت ۲۰۲۶، ۰۰:۵۸ 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
