Judy Array é uma extensão Pecl (código em C que possui interface para utilização em PHP) que implementa arrays associativos com os benefícios de escalabilidade, alta performance e eficiência no uso de memória.
Instalação da extensão Judy
Para instalar no Linux, basta instalar o pacote php-devel, baixar o Judy no site http://pecl.php.net/package/judy, extrair em algum diretório, entrar no diretório e executar os comandos abaixo:
$ phpize $ ./configure --with-judy $ make $ make test $ make install
Caso tenha dado tudo certo, edite o arquivo php.ini e, na sessão de extensões dinâmicas, inclua a linha:
;;;;;;;;;;;;;;;;;;;;;; ; Dynamic Extensions ; ;;;;;;;;;;;;;;;;;;;;;; extension=judy.so
Para checar se a extensão foi carregada, basta criar um arquivo PHP com o código seguinte:
<?php var_dump(extension_loaded('Judy'));
Utilização de Judy Array
A extensão Judy provê uma classe chamada Judy, que implementa as interfaces ArrayAccess e Iterator. Isso significa que é uma classe que possui comportamento bastante semelhante ao de um array associativo convencional. Pode ser utilizado o operador colchetes para definir/obter valores e pode ser percorrido com a estrutura de repetição foreach (ou as funções para posicionar o cursor do array). Por algum motivo desconhecido, a classe também permite usar a função count para obter a quantidade de registros, mesmo sem implementar a interface Countable.
A diferença mais notável no uso desta classe, está no momento da criação do array. No construtor, é necessário especificar o tipo de valores associativos serão armazenados. Os possíveis valores são:
- Judy::BITSET - Índice inteiro e valor booleano;
- Judy::INT_TO_INT - Índice inteiro e valor inteiro;
- Judy::INT_TO_STRING - Índice inteiro e valor string;
- Judy::STRING_TO_INT - Índice string e valor inteiro;
- Judy::STRING_TO_MIXED - Índice string e valor indeterminado.
Exemplo de uso:
// Criando o array indexado por string e que pode armazenar valores de qualquer tipo $array = new Judy(Judy::STRING_TO_MIXED); // Definindo valores em indices na forma de string $array['a'] = 1; $array['b'] = 'teste'; $array['c'] = 3.4; // Imprime o conteudo da posicao 'b' echo $array['b'].PHP_EOL; // Percorrendo o array foreach ($array as $chave => $valor) { echo $chave.' = '.$valor.PHP_EOL; }
Alguns métodos úteis nesta classe e que não estão disponíveis para arrays convencionais são: byCount, memoryUsage e free. O primeiro método serve para obter o N-ésimo elemento (útil quando temos um array indexado por string). O segundo método serve para avaliar quanto de memória foi usada pelo array em bytes. O terceiro serve para limpar todo o array. Estes métodos estão disponíveis a partir da versão 0.1.1 do Judy. A versão pode ser checada pela função judy_version.
Observações
Esta extensão ainda está em fase beta (experimental). O uso da classe é por conta e risco do programador. Talvez você se interesse por outras classes semelhantes, como ArrayObject ou SplFixedArray.
Enquanto a extensão é beta, para instalá-la via pecl install, é necessário incluir o pos-fixo "-beta" assim:
$ pecl install Judy-beta
0 comentários
Postar um comentário
Nota: fique a vontade para expressar o que achou deste artigo ou do blog.
Dica: para acompanhar as respostas, acesse com uma conta do Google e marque a opção "Notifique-me".
Atenção: o blogger não permite inclusão de tags nos comentários, por isso, use algum site externo para postar seu código com dúvidas e deixe o link aqui. Exemplo: pastebin.com