13

我有一个似乎是空字符串的键,但是 usingunset($array[""]);不会删除键/值对。我没有看到另一个函数可以满足我的要求,所以我猜它比调用一个函数更复杂。

print_r 上元素的行是[] => 1,这向我表明键是空字符串。

使用 var_export,元素被列为'' => 1.

使用 var_dump,元素被列为[""]=>int(1).

到目前为止,我已经尝试了所有建议的删除方法,但没有一个删除该元素。我试过了unset($array[""]);unset($array['']);unset($array[null]);没有运气。

4

6 回答 6

24

尝试unset($array[null]);

如果这不起作用,请通过var_exportvar_dump代替打印数组print_r,因为这可以让您查看键的类型。用于var_export查看 PHP 语法中的数据。

var_export($array);

请注意, var_export 不适用于递归结构。

于 2008-10-28T13:02:29.310 回答
2

试过:

$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/>';

拿到:

Array ( [A] => Foo [B] => Bar [] => Bah )
Array ( [B] => Bar [] => Bah )
Array ( [B] => Bar )

您也应该分析密钥的来源...

于 2008-10-28T12:58:04.280 回答
1

我的猜测是它不是一个空字符串。尝试以下操作,看看你会得到什么:

foreach ($array as $index => $value) {
    echo $index;
    echo ' is ';
    echo gettype($index);
    echo "\n";
}
于 2008-10-28T12:46:13.023 回答
1

尝试使用var_dump而不是print_r. 这可能会让您更好地了解密钥到底是什么。

于 2008-10-28T13:04:27.463 回答
1

不知道该告诉你什么。运行此脚本

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

我得到以下输出

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

看看“null”数组键是如何被类型转换为空字符串的?

你确定你没有使用数组的副本吗?如果您从函数内部对 unset() 进行了此调用,那么您可能就是这样。

这是在 PHP 5.2.0 上测试的

于 2008-10-28T14:43:26.670 回答
0

请在该行之前和之后发布您用于删除元素的代码以及您的检查器代码。

我正在寻找的是这样的:

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

var_export还请发布两行的完整输出。

我正在寻找这样的东西:

array (
  '' => 1,
)
array (
)
于 2008-10-28T14:12:17.717 回答