2008-10-28 23 views
13

Tengo una clave que parece ser una cadena vacía, sin embargo, usar unset($array[""]); no elimina el par de clave/valor. No veo otra función que haga lo que quiero, así que supongo que es más complicado que llamar a una función.¿Cómo se elimina un valor que tiene una clave vacía de una matriz asociativa en PHP?

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

Al usar var_export, el elemento aparece como '' => 1.

Usando 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[null]); sin suerte.

Respuesta

24

Probar unset($array[null]);

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

var_export($array);

Tenga en cuenta que var_export no funciona con estructuras recursivas.

+0

En algún punto de la línea, un valor nulo se estaba transformando en la cadena vacía. Al ir a la fuente misma de la matriz y desactivar los valores nulos, pude corregir el problema. –

+0

Felicidades, entonces. :) – Lemming

+2

De http://php.net/manual/en/language.types.array.php: "Usar TRUE como clave evaluará al entero 1 como una clave. Usar FALSE como clave evaluará al entero 0 como una clave. Usar NULL como clave evaluará la cadena vacía. Usar la cadena vacía como clave creará (o sobrescribirá) una clave con la cadena vacía y su valor; " – okalex

1

Supongo que no es una cadena vacía. Prueba lo siguiente para ver lo que se obtiene:

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

Estoy haciendo print_r en la matriz, y parece ser una cadena vacía. –

+0

Una vez que obtengo una respuesta que funciona, voy a votar mejor porque es una buena idea. Pero no quiero que parezca que encontré una respuesta funcional todavía. –

2

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) 

debe analizar dónde está la llave viene, también ...

1

Intente utilizar var_dump en lugar de print_r. Esto puede darle una mejor idea de qué es exactamente la clave.

0

Por favor, publique el código que usa 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); 

Por favor, también publican la salida completa de ambas líneas var_export.

Busco algo como esto:

array (
    '' => 1, 
) 
array (
) 
+0

He estado publicando el código al mismo tiempo. –

+0

Estaba (y no estoy seguro) de que está revisando las cosas correctamente. Sin ofender, pero el código debería funcionar. El hecho de que no indica que una de nuestras suposiciones es incorrecta. Para verificar, quería ver el código sin censura, sin abreviar, completo, no una versión resumida. – Lemming

1

No está seguro de lo que le diga.La ejecución de este script de

<?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); 

me da 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 
) 

ver como la clave de la matriz "nulo" se convierte en tipo de una cadena vacía?

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

Esto se probó en PHP 5.2.0

+0

Wow, no me había dado cuenta de que null se convierte en una cadena vacía cuando se usa como una clave de matriz. Comportamiento loco unset ($ array [null]) simplemente funciona como unset ($ array ['']) luego. – Lemming

Cuestiones relacionadas