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

Reply via email to