Re: [PHP-DEV] [RFC] array_search_range() function

[email protected] (سپهر محمودی)
Newsgroups php.internals
Message-ID <CA+Jcf5tpFt1Z+HtdnTARMkeVRmar6tia22-zcJQ+Qn9BOk_vMA@mail.gmail.com>
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
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.