Блог

PHP/Notice: переданный массив является ассоциативный?

Как проверить в PHP является массив ассоциативным или последовательным?

Версия #1

function is_assoc(array $needle) {
    return count(array_filter(array_keys($needle), 'is_string')) > 0;
}

Версия #2

function is_assoc($needle) {
    return array_keys($needle) !== range(0, count($needle) - 1);
}

Версия #3

function is_assoc(array $needle) {
    $keys = array_keys($needle);
    return ($keys != array_keys($needle));
}
var_dump(is_assoc(['a', 'b', 'c']));                     // false
var_dump(is_assoc(['0'=>'a', '1'=>'b', '2'=>'c']));      // false
var_dump(is_assoc(['a'=>'a', 'b'=>'b', 'c'=>'c', 'd'])); // true