Question

I have a key that appears to be an empty string, however using unset($array[""]); does not remove the key/value pair. I don't see another function that does what I want, so I'm guessing it's more complicated that just calling a function.

The line for the element on a print_r is [] => 1, which indicates to me that the key is the empty string.

Using var_export, the element is listed as '' => 1.

Using var_dump, the element is listed as [""]=>int(1).

So far, I have tried all of the suggested methods of removal, but none have removed the element. I have tried unset($array[""]);, unset($array['']);, and unset($array[null]); with no luck.

Was it helpful?

Solution

Try unset($array[null]);

If that doesn't work, print the array via var_export or var_dump instead of print_r, since this allows you to see the type of the key. Use var_export to see the data in PHP syntax.

var_export($array);

Note that var_export does not work with recursive structures.

OTHER TIPS

Tried:

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

You should analyse where the key come from, too...

My guess is that it's not an empty string. Try the following to see what you get:

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

Try using var_dump instead of print_r. This may give you a better idea of what exactly the key is.

Not sure what to tell you. Running this 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 );

I get the following output

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

See how the "null" array key was type converted to an empty string?

Are you sure you are not working with a copy of the array? If you did this call to unset() from inside a function, it's possible that you are.

This was tested on PHP 5.2.0

Please post the code you use to remove the element as well your checker code before and after that line.

What I'm looking for is something like this:

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

Please also post the complete output of both var_export lines.

I'm looking for something like this:

array (
  '' => 1,
)
array (
)
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top