Leandro Vieira Pinho´s Blog

Just another WordPress weblog

Função PHP para remover “keys” de um Array

January 26th, 2008. Published under array, php, unset. 6 Comments.

Acabei de criar um função em PHP para remover “keys” de um Array.

Considere o array abaixo:

$array = array (

'nome' => 'Leandro',

'sobrenome' => 'Vieira Pinho',

'email' => 'spam@efoda.com'

);

E considere também que você deseja excluir a key “email”, por exemplo. Portanto, o procedimento seria o seguinte:

unset( $array['email'] );

Logo, a estrutura do Array se modificaria com a ação executada. Resultando em:

$array = array (

'nome' => 'Leandro',

'sobrenome' => 'Vieira Pinho'

);

Quando houver necessidade de remover várias “keys” de um Array, utilizaremos várias vezes a função unset como exemplificado acima. Para simplificar meu trabalho, criei uma função intitulada como remove_key_from_array. Nela utilizo a função unset quantas vezes for necessário para remover as “keys” desejadas do um array, de acordo com os parâmetros passado à função.

Exemplo de uso da função considerando o array demonstrado acima.

print_r( remove_key_from_array( $array, array(’sobrenome’,'email’) ) );

O resultado seria:

Array ( [nome] => Leandro )

Abaixo o código da função.

/**
* This function remove specified key from a given array
*
* @version 0.1
* @author Leandro Vieira Pinho
* @date Saturday, January 26, 2008
* @param array $array Array that contains the keys to be removed
* @param mixed $keys String with the key name; or, an Array with the keys names
* @return array Return the given array without the specified key(s)
*/
function remove_key_from_array( $array, $keys )
{
if ( is_array( $keys ) )
foreach( $keys as $key )
unset( $array[$key] );
else
unset( $array[$keys] );
return $array;
}

[UPDATE]Nova versão. Obrigado Fernando pela sugestão. [/UPDATE]

/**
 * This function remove specified key from a given Array and reindex it, if wanted.
 *
 * @version 0.2
 * @author Leandro Vieira Pinho
 * @date Monday, January 28, 2008
 * @param array $array Given Array that contains the keys to be removed
 * @param array $keys Array with the keys names
 * @param boolean $reindex Use "true" if you want to reindex the given array or convert associative array in indexed; "false" is default.
 * @return array Return the given array without the specified key(s)
 */
function remove_key_from_array( $array, $keys, $reindex = false )
{
	$keys = (array) $keys;
	foreach( $keys as $key )
		unset( $array[$key] );
	return ( $reindex ) ? $array = array_values( $array ) : $array;
}

Se lhe for útil, faço bom proveito.

6 Comments

Fernando Bittencourt  on January 28th, 2008

function remove_key_from_array( $array, $keys )
{
$keys = (Array) $keys;
foreach( $keys as $key )
unset( $array[$key] );
return $array;
}

Mais simples :) Ah, em tempo: tu pode destruir N variáveis chamando unset() uma única vez.

Leandro Vieira  on January 28th, 2008

Maravilha Fernando,

Grato pela sugestão.

Além da sua sugestão, incrementei uma opção para “reindexar” o array.

Abraços.

juseh  on January 30th, 2008

soluções interessantes.
porem, n compreendi seu objetivo ao criar a função.
vc deseja apagar somente a key ou também seu respectivo valor? pelo código creio q o valor tb deva ir pro lixo, mas em todo caso, minhas dicas sao:
1 - Para apagar os valores pode-se usar unset($array['key1'], $array['key2']….) separando os valores por virgula, q é mais rapido que usando foreach().
2 - Para apagar somente as keys, podemos usar sort(), q elimina as chaves e, de quebra, ordena os valores. Ou array_values(), como vc colocou no update.

A função criada por vc torna o processo mais pratico, mas, ao meu ver, n há necessidade de implementa-la em outros códigos.

Leandro Vieira  on February 1st, 2008

Juseh,

Essa função foi criada pela necessidade que tive num projeto em qual estou envolvido. Como de praxe, decidir compartilhá-la.

Ao excluir a “key” de um Array, logo seu valor será destruido.

A função criada também utiliza unset para excluir a(s) key(s) do Array informado. Não poderia informar os valores separando-os por vírgulas, pelo simples motivo, que em certos momentos não sei quais keys serão excluídas. Portanto, o foreach se faz necessário para percorrer as keys informadas.

Eu não poderia utilizar a função sort, por que sairia do escopo proposto, isto é, remover key de um array, somente. Além do mais, utilizar sort em arrays com valores mesclados podem resultar em algo imprevisível, segundo o próprio PHP. Como a função não sabe o conteúdo do array, não há por que utilizar a função sort.

Já a função array_values tem o próposito de “reindexar” o array após a removação da key. Somente.

Como disse anteriormente, a função me foi útil num projeto. E está aí para quem precisar de algo semelhante.

Um abraço.

Camilo  on April 30th, 2008

Cara! sem querer te chatear mas não há necessidade de implementar esse tipo de solução.
Fico muito triste sendo você colunista da revista imaster não conhecer o manual php.
Existe uma função chamada array_keys() que retorna uma array com indices numericos contendo as chaves da array inserida.
Exemplo:
‘leandro vieira’);

// função php que retorna array com “keys ” da array
// @param array
// @return array
$keys = array_keys($array);

echo $keys[0]; // retorna nome;

?>

Logo, espero te ajudado
Att,

Leandro Vieira  on May 6th, 2008

Oi Camilo, obrigado pelo comentário.

Seu comentário não me chateia, muito pelo contrário. Fique à vontade.

Como disse anteriormente, essa função foi criada pela necessidade que tive num projeto no qual estive envolvido. Como de praxe, decidir compartilhá-la. Portanto, a função pode parecer inútil para você, mas para mim teve utilidade.

Preciso te informar que conheço o Manual do PHP. Ao mesmo tempo lhe dizer que fico triste ao receber crítica sem fundamento.

Você se depara num post intitulado como: “Função PHP para remover keys de um Array” e sugere a função nativa do PHP array_keys, a qual retorna todas as keys de um array.

No entanto, a função que você sugere - array_keys - tem uma utilidade interessante quando se faz uso do seu 2º parâmetro: search_value, o qual é opcional; retornando somente as keys contendo o valor informado.

Mas pra minha necessidade, a função search_value não se aplica. Não preciso que me retorne as keys contendo tal valor ou todas de um array. Preciso, apenas remover algumas keys.

Abraços.

Leave a Comment