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.
-
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"; }
Thomas Owens : I'm doing a print_r on the array, and it appears to be an empty string.Thomas Owens : Once I get a working answer, I'll upvote because it is a good thought. But I don't want it to appear that I found a working answer yet.From Allain Lalonde -
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...
From PhiLho -
Try
unset($array[null]);
If that doesn't work, print the array via
var_export
orvar_dump
instead ofprint_r
, since this allows you to see the type of the key. Usevar_export
to see the data in PHP syntax.var_export($array);
Note that var_export does not work with recursive structures.
Thomas Owens : Somewhere along the line, a null value was getting transformed into the empty string. By going to the very source of the array and unsetting null values, I was able to correct the problem.Lemming : Congratulations, then. :)okalex : From http://php.net/manual/en/language.types.array.php: "Using TRUE as key will evaluate to integer 1 as a key. Using FALSE as key will evaluate to integer 0 as a key. Using NULL as a key will evaluate to the empty string. Using the empty string as a key will create (or overwrite) a key with the empty string and its value;"From Lemming -
Try using
var_dump
instead ofprint_r
. This may give you a better idea of what exactly the key is.From Lucas Oman -
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 ( )
Thomas Owens : I have been posting the code right along.Lemming : I was (and am) not sure, that you're checking things correctly. No offense, but the code should work. The fact that it doesn't indicated that one of our assumptions is incorrect. To verify, I wanted to see the uncensored, unabbreviated, full code, not a summarized version.From Lemming -
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
Lemming : Wow, I hadn't realized that null gets converted to an empty string when used as an array key. Crazy behaviour. unset($array[null]) just works like unset($array['']) then.From Peter Bailey
0 comments:
Post a Comment