Boa noite Anthony ,
A função array_key_exists, serve para verificar, se a chave do indice existe no array, no seu exemplo você está buscando pelo valor que a chave possui, nesse caso 'Ana'. A mensagem informa que não foi possivel utilizar o argumento, é bem provavel que o erro esteja no "key:"
Você está buscando um array dentro de outro array, neste caso você está trabalhando com array multidimensional, se rescrever o var_dump assim:
var_dump(array_key_exists('aluno', $notas));
O resultado vai ser bool(false), isso ocorre porque a chave do indice do primeiro array é 0,1 e 2, e somente depois é que temos outra array com os indices dos alunos.
Mas se alterar o var_dump novamente para:
var_dump(array_key_exists('aluno', $notas[0]));
A saída será bool(true), entretanto ele só vai fazer a pesquisa no primeiro registro; o registro [0]. Acredito que a intensão é fazer uma pesquisar em todo o array e encontrar um determinado valor como o nome do aluno, para isso você pode utilizar o foreach para pesquisar o valor dentro do array multidimensional.
Segue um exemplo:
foreach($notas as $notas => $data) {
if(stripos($data['aluno'], 'Ana') !== false) {
$aluno[] = $data;
}
}
print_r($aluno);
Nesse exemplo é criado um novo array de saída, contendo apenas os valores referente ao dados do aluno pesquisado.
Caso tenha resolvido a sua duvida, por favor marque a dúvida como resolvido.