PHP
Determine if PHP Array is Associative or Sequential
Discover a reliable method to programmatically check if a given PHP array is associative (string keys) or sequential (numeric, zero-indexed keys).
<?php
function isAssociative(array $arr): bool
{
if (empty($arr)) {
return false; // An empty array is neither truly associative nor sequential
}
// Check if the array keys are not a continuous numeric sequence starting from 0
return array_keys($arr) !== range(0, count($arr) - 1);
}
$sequentialArray = [1, 2, 3, 4];
$associativeArray = ['name' => 'John', 'age' => 30];
$mixedArray = [0 => 'apple', 'color' => 'red', 2 => 'banana']; // Behaves as associative for this check
$emptyArray = [];
echo 'Sequential array is associative? ' . (isAssociative($sequentialArray) ? 'Yes' : 'No') . "
";
echo 'Associative array is associative? ' . (isAssociative($associativeArray) ? 'Yes' : 'No') . "
";
echo 'Mixed array is associative? ' . (isAssociative($mixedArray) ? 'Yes' : 'No') . "
";
echo 'Empty array is associative? ' . (isAssociative($emptyArray) ? 'Yes' : 'No') . "
";
// Output:
// Sequential array is associative? No
// Associative array is associative? Yes
// Mixed array is associative? Yes
// Empty array is associative? No
How it works: PHP arrays are a hybrid data structure, meaning they can have both integer and string keys. Sometimes, it's necessary to determine if an array primarily functions as an associative map (string keys or non-sequential integer keys) or a list (zero-indexed, sequential integer keys). This function does exactly that by comparing the array's actual keys against a perfectly sequential range, providing a robust check for array type.