====== PHP RFC: Add is_assoc_array ====== * Version: 0.9 * Date: 2026-02-21 * Author: Muhammed Arshid, arshidkv12@gmail.com * Status: Under Discussion * Implementation: https://github.com/php/php-src/pull/21266 ===== Introduction ===== PHP arrays can behave as both lists and associative maps. Currently, PHP has no built-in function to detect whether an array is associative. Userland frameworks implement helper functions for this purpose. Adding a native function improves performance, readability, and consistency. 1, 'b' => 2]; var_dump(is_assoc_array($data)); // bool(true) ?> ===== Proposal ===== Add a new core function: This function determines whether an array is associative based on PHP’s internal array storage. An array is considered associative when it is not a packed array internally. ==== Examples ==== 'a', 0 => 'b'])); // true var_dump(is_assoc_array([1 => 'a', 0 => 'b'])); // true var_dump(is_assoc_array([1 => 'a', 2 => 'b'])); // true var_dump(is_assoc_array([0 => 'a', 1 => 'b'])); // false var_dump(is_assoc_array(['a', 'b'])); // false var_dump(is_assoc_array([])); // false (empty array not associative) var_dump(is_assoc_array([1, 2, 3])); // false var_dump(is_assoc_array(['foo', 2, 3])); // false var_dump(is_assoc_array([0 => 'foo', 'bar'])); // true var_dump(is_assoc_array([1 => 'foo', 'bar'])); // true var_dump(is_assoc_array([0 => 'foo', 'bar' => 'baz'])); // true var_dump(is_assoc_array([0 => 'foo', 2 => 'bar'])); // true var_dump(is_assoc_array(['foo' => 'bar', 'baz' => 'qux'])); // true ?> ===== Why This is Needed ===== * Developers frequently need to check array type: * JSON encoding logic * API validation * Config parsing * Data normalization Userland solutions are slower and inconsistent. Native implementation provides: * O(1) performance * Standard behavior * Cleaner code ===== Backward Incompatible Changes ===== None This adds a new function only. ===== Proposed PHP Version(s) ===== PHP 8.6 ===== RFC Impact ===== There may be conflicts if userland code already defines is_assoc_array(). Such functions can be replaced with the built-in implementation. No impact to SAPIs or OPcache. ===== Voting Choices ===== Pick a title that reflects the concrete choice people will vote on. Please consult [[https://github.com/php/policies/blob/main/feature-proposals.rst#voting-phase|the php/policies repository]] for the current voting guidelines. ---- Primary Vote requiring a 2/3 majority to accept the RFC: * Yes * No * Abstain ===== Patches and Tests ===== Links to proof of concept PR. If there is no patch, make it clear who will create a patch, or whether a volunteer to help with implementation is needed. ===== Implementation ===== After the RFC is implemented, this section should contain: - the version(s) it was merged into - a link to the git commit(s) - a link to the PHP manual entry for the feature ===== References ===== Links to external references, discussions, or RFCs. ===== Rejected Features ===== Keep this updated with features that were discussed on the mail lists. ===== Changelog ===== If there are major changes to the initial proposal, please include a short summary with a date or a link to the mailing list announcement here, as not everyone has access to the wikis' version history.