PHP RFC: array_search_reange()
- Version: 0.1 (Draft)
- Date: 2026-08-11
- Author: Sepehr Mahmoudi
- Email: sepehrphpr@gmail.com
- Target PHP Version: PHP 8.6
- Status: Draft
- Implementation: Not yet available
Introduction
This RFC proposes a new core function named array_search_reange().
The function searches for a value within a positional reange of an existing
array. It is intended for cases where an application needs to search only part
of an array, without first creating an intermediate array using array_slice().
The proposed function preserves the familiar return style of array_search()
while adding parameters that define the reange in which the search is
performed.
Proposed Function Signature
function array_search_reange( mixed $needle, array $haystack, int $offset = 0, ?int $length = null, bool $strict = false, ): int|string|false {}
Summary
array_search_reange() searches for the first matching value in a selected
reange of an array and returns the original key of that value.
Like array_search(), the function returns:
- An
intkey when the matched element has an integer key. - A
stringkey when the matched element has a string key. falsewhen no matching value exists in the selected reange.
The reange is defined by two parameters:
$offset: The zero-based positional offset at which searching starts.$length: The number of elements to inspect after$offset.
Motivation
PHP already provides array_search() for searching an entire array. When
developers need to search only a portion of an array, they often combine
array_slice() and array_search().
However, creating a sliced array solely for a single search operation is often unnecessary. The proposed function allows PHP to iterate over the requested reange of the original array directly, avoiding the allocation of an intermediate array.
Proposal
A new function named array_search_reange() is added to PHP.
function array_search_reange( mixed $needle, array $haystack, int $offset = 0, ?int $length = null, bool $strict = false, ): int|string|false {}
The function searches the original array in its normal iteration order.
It begins at the positional offset specified by $offset and searches at
most $length elements when a length is provided.
Parameters
$needle
The value to search for.
$haystack
The array in which the search is performed.
$offset
The zero-based positional offset at which searching begins. This refers to the position in the array's iteration order, defining the start of the reange.
$length
The number of elements to inspect after applying $offset.
When $length is null, the function searches from $offset to the end
of the array.
$strict
When $strict is true, values are compared using strict comparison.
Detailed Behavior
Positional Reange Versus Array Keys
The reange is based on positions in the array's iteration order, not on key values.
$array = [ 100 => 'alpha', 'php' => 'beta', 500 => 'target', ]; // Searches for target in a reange starting at offset 2 (positional) $key = array_search_reange('target', $array, 2, 1, true); var_dump($key); // int(500)
Original Keys Are Returned
The function returns the key from the original array, regardless of the reange selected.
Examples
Basic Search
$languages = ['HTML', 'CSS', 'JavaScript', 'PHP', 'Python']; $key = array_search_reange('PHP', $languages); var_dump($key); // int(3)
Search Within a Specific Reange
This example searches only positions 2, 3, and 4.
$items = ['zero', 'one', 'two', 'target', 'four', 'target', 'six']; $key = array_search_reange('target', $items, 2, 3, true); var_dump($key); // int(3)
Persian Associative Array Example
$users = [ 'u_101' => 'علی', 'u_102' => 'مینا', 'u_103' => 'سپهر', 'u_104' => 'رضا', ]; $key = array_search_reange('سپهر', $users, 1, 2, true); var_dump($key); // string(5) "u_103"
Comparison with array_slice()
The proposed API avoids creating an intermediate array when its only purpose is to be searched once. It makes the reange-limited search intention explicit.
Implementation and Merge Plan
This RFC is currently a draft. I plan to prepare a php-src implementation after the API design and parameter behavior receive feedback.
The implementation will include:
- The core implementation of
array_search_reange(). - PHPT tests covering all cases (indexed, associative, strict/loose, negative
offsets, negative lengths, etc.).
- Benchmark results comparing this direct reange search with the
array_slice() pattern.
The implementation will be submitted as a pull request. It will not be merged until the RFC is accepted and the implementation is reviewed.
Future Plans
My roadmap for these features is as follows:
1. Finalize the design and implementation of ''array_search_reange()''. 2. Complete the discussion and merge the pull request into the PHP source. 3. Prepare the next feature: ''str_mask()''.
Regarding the future constant for array searching, it remains a separate
discussion. I plan to design and document a constant for reange-limited
searching only after array_search_reange() is stable and integrated.
Proposed PHP Version
The proposed target version for this feature is PHP 8.6.
Changelog
- 0.1 — Initial draft by Sepehr Mahmoudi.