PHP Como verificar se um Array é 100% ASSOC

function isFullyAssoc($array) {
  return count(array_filter($array, 'is_string', ARRAY_FILTER_USE_KEY)) === count($array);
}

echo isFullyAssoc(['x' => 'xis', 'banana', 1, true]); // false
echo isFullyAssoc(['x' => 'xis', 'y' => 1, 'z' => true]); // true

Pois é, não sei quando você vai precisar validar se um array possui todos os elementos indexados com chave associativa, mas eu precisei hoje.

Independentemente da necessidade, achei legal apresentar esta solução por que não encontrei muito material navegando pela internet.

Como o PHP não possui uma função nativa para esta validação o jeito foi improvisar mesmo, então vamos explicar o conceito do enjambre.

Utilizamos ARRAY_FILTER para segregar todos os elementos cujos índices sejam do tipo STRING. Para isto basta informar a própria função IS_STRING do PHP como CALLBACK function.

Além disto temos que especificar para ARRAY_FILTER que queremos observar os índices, e não os valores, do array no processo de filtragem. Assim devemos informar o terceiro argumento ARRAY_FILTER_USE_KEYS.

No final basta comparar a quantidade de elementos filtrados com a quantidade de elementos da array original. Se houver divergência nesta comparação isto indica seguramente que algum índice do array original não era ASSOC.

Afinal de contas, ARRAY é masculino ou feminino? Vai saber, depois de escrito o texto percebi que mesclei os gêneros, mas no review final ficou menino mesmo!