¿Cómo se elimina un valor que tiene una clave vacía de una matriz asociativa en PHP?

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

  •  04-07-2019
  •  | 
  •  

Pregunta

Tengo una clave que parece ser una cadena vacía, sin embargo, al utilizar unset ($ array [" "]); no se elimina el par clave / valor. No veo otra función que haga lo que quiero, así que supongo que es más complicado llamar una función.

La línea para el elemento en un print_r es [] = > 1 , que me indica que la clave es la cadena vacía.

Usando var_export, el elemento aparece como '' = > 1 .

Al utilizar var_dump, el elemento aparece como [" "] = > int (1) .

Hasta ahora, he intentado todos los métodos de eliminación sugeridos, pero ninguno ha eliminado el elemento. He intentado unset ($ array [" "]); , unset ($ array ['']); y unset ($ array [ nulo]); sin suerte.

¿Fue útil?

Solución

Prueba unset($array[null? );

Si eso no funciona, imprima el arreglo a través de var_export o var_dump en lugar de print_r , ya que esto le permite ver el tipo de la llave. Use var_export para ver los datos en la sintaxis de PHP.

var_export($array);

Tenga en cuenta que var_export no funciona con estructuras recursivas.

Otros consejos

Intentado:

$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 )

También debes analizar de dónde proviene la clave ...

Mi conjetura es que no es una cadena vacía. Intente lo siguiente para ver lo que obtiene:

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

Intente usar var_dump en lugar de print_r . Esto puede darle una mejor idea de cuál es exactamente la clave.

No estoy seguro de qué decirte. Ejecutando este 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 );

Obtengo el siguiente resultado

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

Vea cómo " null " ¿La clave de matriz se convirtió de tipo en una cadena vacía?

¿Está seguro de que no está trabajando con una copia de la matriz? Si hiciste esta llamada a unset () desde dentro de una función, es posible que lo estés.

Esto fue probado en PHP 5.2.0

Publique el código que utiliza para eliminar el elemento y su código de comprobación antes y después de esa línea.

Lo que estoy buscando es algo como esto:

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

También publique el resultado completo de ambas líneas var_export .

Estoy buscando algo como esto:

array (
  '' => 1,
)
array (
)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top