¿Cómo se elimina un valor que tiene una clave vacía de una matriz asociativa en PHP?
-
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.
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 (
)