Como você remover um valor que tem uma chave vazia de uma matriz associativa em PHP?

StackOverflow https://stackoverflow.com/questions/243132

  •  04-07-2019
  •  | 
  •  

Pergunta

Eu tenho uma chave que parece ser uma cadeia vazia, porém utilizando unset($array[""]); não remove o par chave / valor. Não vejo outra função que faz o que eu quero, então eu estou supondo que é mais complicado que apenas chamando uma função.

A linha para o elemento em um print_r é [] => 1, o que indica-me que a chave é a cadeia vazia.

Usando var_export, o elemento é listado como '' => 1.

Usando var_dump, o elemento é listado como [""]=>int(1).

Até agora, eu tentei todos os métodos sugeridos de remoção, mas nenhum ter removido o elemento. Eu tentei unset($array[""]);, unset($array['']); e unset($array[null]); sem sorte.

Foi útil?

Solução

Tente unset($array[null]);

Se isso não funcionar, imprimir a matriz via var_export ou var_dump vez de print_r, uma vez que este permite que você veja o tipo da chave. Use var_export para ver os dados na sintaxe PHP.

var_export($array);

Note que var_export não funciona com estruturas recursivas.

Outras dicas

Tentou:

$someList = Array('A' => 'Foo', 'B' => 'Bar', '' => 'Bah');
print_r($someList);
echo '<br/>';
unset($someList['A']);
print_r($someList);
echo '<br/>';
unset($someList['']);
print_r($someList);
echo '<br/>';

Got:

Array ( [A] => Foo [B] => Bar [] => Bah )
Array ( [B] => Bar [] => Bah )
Array ( [B] => Bar )

Você deve analisar onde a chave vem, também ...

Meu palpite é que não é uma cadeia vazia. Tente o seguinte para ver o que você tem:

foreach ($array as $index => $value) {
    echo $index;
    echo ' is ';
    echo gettype($index);
    echo "\n";
}

Tente usar var_dump vez de print_r. Isso pode lhe dar uma idéia melhor do que exatamente é a chave.

Não sei o que lhe dizer. A execução deste script

<?php

$arr = array(
        false   => 1
    ,   true    => 2
    ,   null    => 3
    ,   'test'  => 4
//  ,   ''      => 5
);

print_r( $arr );

foreach ( $arr as $key => $value )
{
    var_dump( $key );
}

unset( $arr[''] );

print_r( $arr );

Eu recebo a seguinte saída

Array
(
    [0] => 1
    [1] => 2
    [] => 3
    [test] => 4
)
int(0)
int(1)
string(0) ""
string(4) "test"
Array
(
    [0] => 1
    [1] => 2
    [test] => 4
)

Veja como a chave do array "nulo" foi tipo convertido para uma cadeia vazia?

Tem certeza de que não estão trabalhando com uma cópia da matriz? Se você fez esta chamada para unset () de dentro de uma função, é possível que você é.

Esta foi testado em PHP 5.2.0

Por favor, poste o código que você usa para remover o elemento bem seu código verificador antes e depois dessa linha.

O que eu estou procurando é algo como isto:

var_export($array);
echo "\n";
unset($array[""]);
var_export($array);

Por favor, postar a saída completa de ambas as linhas var_export.

Eu estou procurando algo como isto:

array (
  '' => 1,
)
array (
)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top