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

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.

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

  1. 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.

  2. 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.

  3. 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.

  4. 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,

  5. 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.

  6. opá… tava passando aqui ai fui ver oque era isso..
    melhor assim só
    function remove_keys( &$array, $keys ){
    if( is_array( $keys ) )
    foreach( $keys as $key)
    unset( $array[$key]);
    else
    unset( $array[$keys]);
    }
    passei como referencia.. pra usar igual o unset mesmo…
    ex: remove_keys( $array, array( ‘key01′, ‘key02′));

    bacana até criar uma função pra isso mesmo..
    deve vez em quando dou uns unset gigante.. na mesma var..
    tipo..
    unset( $array['key01'], $array['key02']);
    t+

  7. Boa tarde.

    Gostei da função, realmente muito útil, por isso resolvi fazer minhas alterações nela e estou enviando para você ver o que acha.

    Alterações:
    Mudei o nome para array_remove_keys para seguir os padrões das funções nativas do PHP para arrays (array_…)
    Adicionei novos modos de passagem de parâmetros, você pode passar uma string, um inteiro ou um vetor.
    Para reindexar basta passar true como ultimo parâmetro.
    O array a ser alterado deve ser sempre o primeiro parâmetro e ele é passado por referência, assim não precisa fazer $array = array_remove…

    Exemplos:

    Abraços

  8. Ops.

    Meu código foi cortado pq tava com as tags do PHP.

    Abraços.

    Código:
    function array_remove_keys(&$array) {
    $args = func_get_args();
    if (count($args) == 1) return true;
    array_shift($args);

    $reIndex = false;
    if (is_bool($args[count($args)-1])) $reIndex = array_pop($args);

    foreach ($args as $value1) {
    if (is_array($value1)) {
    foreach ($value1 as $value2) array_remove_keys($array,$value2);
    } else {
    unset($array[$value1]);
    }
    }

    if ($reIndex) $array = array_values($array);

    return true;
    }

    Exemplos:
    array_remove_keys($array,’a',’b',’c');
    array_remove_keys($array,’a',’b',’c',true);
    array_remove_keys($array,array(‘a’,'b’,'c’));
    array_remove_keys($array,array(‘a’,'b’,'c’),true);
    array_remove_keys($array,’a',array(‘e’,'d’),’c');
    array_remove_keys($array,’a',array(‘e’,'d’),’c',true);