我有一个看似空字符串的键,但是使用unset($array[""]);
不会删除键/值对。我没有看到另外一个功能可以实现我想要的功能,所以我猜测只调用一个函数会更复杂。
print_r上元素的行是[] => 1
,它向我指示键是空字符串。
使用var_export,该元素列为'' => 1
。
使用var_dump,该元素列为[""]=>int(1)
。
到目前为止,我已经尝试了所有建议的删除方法,但没有删除该元素。我试过了unset($array[""]);
,unset($array['']);
和unset($array[null]);
没有运气。
答案 0 :(得分:24)
尝试unset($array[null]);
如果不起作用,请通过var_export
或var_dump
而不是print_r
打印数组,因为这样可以查看密钥的类型。使用var_export
以PHP语法查看数据。
var_export($array);
请注意,var_export不适用于递归结构。
答案 1 :(得分: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/>';
GOT:
Array ( [A] => Foo [B] => Bar [] => Bah )
Array ( [B] => Bar [] => Bah )
Array ( [B] => Bar )
您应该分析密钥的来源......
答案 2 :(得分:1)
我的猜测是它不是一个空字符串。请尝试以下方法查看您的内容:
foreach ($array as $index => $value) {
echo $index;
echo ' is ';
echo gettype($index);
echo "\n";
}
答案 3 :(得分:1)
尝试使用var_dump
代替print_r
。这可以让您更好地了解密钥究竟是什么。
答案 4 :(得分: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上测试的
答案 5 :(得分:0)
请发布您用于删除该元素的代码以及该行之前和之后的检查器代码。
我正在寻找的是这样的:
var_export($array);
echo "\n";
unset($array[""]);
var_export($array);
请同时发布var_export
行的完整输出。
我正在寻找类似的东西:
array (
'' => 1,
)
array (
)