Hi mickmackusa and everyone, Thank you for your time and the detailed feedback on the "array_search_range" RFC.
Given the valid concerns and the strong opposition raised during the discussion, I have decided to officially withdraw this RFC. I really appreciate the time you all took to review and discuss it. I am taking this as a valuable learning experience and hope to come back with a better and more useful function proposal for PHP in the near future. Best regards, Sepehr On پنجشنبه ۲۰ اوت ۲۰۲۶، ۰۰:۴۴ mickmackusa <[email protected]> wrote: > Hi Sepehr, I've taken some time to review your proposal more thoroughly > and I have some feedback. > > 1. Is the example in your RFC for a large array of database data an XY > Problem? > My first instinct would be to build pagination into the query itself > rather than process the result set data. > > 2. Is the example in your RFC for a large array of filesystem data an > XY Problem? > Should the script which calls `file()` actually do the following to > avoid loading the unwanted portions of data in the first place? > ```php > $file = new SplFileObject('access.log'); > $file->seek(100000); > > $end = 200000; > while (!$file->eof() && $file->key() < $end) { > if (str_contains($file->current(), 'ERROR')) { > echo $file->key(); > break; > } > $file->next(); > } > ``` > > 3. I'm still not convinced that slicing a copy of the array is > necessary and your proposal seems to be founded on that premise. > The enormous data payload is already loaded into memory, it just needs > to be iterated. > Why can't you use a foreach and conditionally continue/break the loop > while searching? > In a scenario which involves an indexed array, a for() loop can be > used, but for utility a foreach() is more suitable. > ```php > if (!function_exists('array_search_range')) { > function array_search_range( > mixed $needle, > array $haystack, > int $offset = 0, > ?int $length = null, > bool $strict = false > ): int|string|false { > $count = count($haystack); > > if ($offset < 0) { > $offset = max(0, $count + $offset); > } > > if ($length === null) { > $length = $count - $offset; > } elseif ($length < 0) { > $length = $count - $offset + $length; > } > > if ($length <= 0 || $offset >= $count) { > return false; > } > > $position = 0; > $end = $offset + $length; > > foreach ($haystack as $key => $value) { > if ($position >= $end) { > break; > } > > if ($position >= $offset) { > if ($strict ? $value === $needle : $value == $needle) { > return $key; > } > } > > ++$position; > } > > return false; > } > } > ``` > > 4. I am not a fan of "falsible return values" because I prefer to null > coalesce in my code and that is the reason that I try to avoid old native > PHP functions that return false on an unsuccessful process. > I can appreciate that you are trying to maintain consistency with > array_search() - which I almost never use because value-searching an array > is seldom the most efficient process. > > 5. Is your proposed function name ideal? > The coding intention is to hybridize `array_search()` and > `array_slice()`, so shouldn't it be `array_slice_search()` or > `array_search_slice()`? > The "range" in the function name might mislead developers into > believing that the function searches for a range of needles. > > 6. If your coding intention is to meaningfully interrogate portions of > an enormous array and performance is a concern, then perhaps it is time to > consider partitioning the enormous array into smaller, more manageable > chunks or a more searchable map. > On relatively small arrays, I find this proposal even less compelling. > Ultimately, I still feel that this RFC is solving a problem that > should usually be mitigated by an earlier refactor. > > 7. I find the last line under the "Why This Function Is Worth It" to > be unusual. "Available now: usable today, not after a multi-month RFC" > ...well, it's not usable today - it will need to go through the RFC vetting > process and then get implemented. Your statement feels like unnecessary and > misleading marketing speak. > > > While I can imagine there might be a few developers who can benefit from > this RFC, I remain unconvinced that this function would be widely used by > PHP developers. > > mickmackusa >
