繁体   English   中英

如何从PHP的关联数组中删除具有空键的值?

[英]How do you remove a value that has an empty key from an associative array in PHP?

我有一个似乎是空字符串的键,但是使用了unset($array[""]); 不会删除键/值对。 我看不到另一个函数可以满足我的要求,因此我猜测仅调用一个函数会更加复杂。

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

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

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

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

尝试unset($array[null]);

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

var_export($array);

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

尝试过:

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

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

我的猜测是这不是一个空字符串。 请尝试以下操作以查看得到的结果:

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

尝试使用var_dump而不是print_r 这可以使您更好地了解密钥的确切含义。

不知道该怎么说。 运行此脚本

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

看看如何将“空”数组键类型转换为空字符串?

您确定不使用阵列的副本吗? 如果您从函数内部对unset()进行了此调用,则可能是这样。

已在PHP 5.2.0上进行了测试

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

我正在寻找的是这样的:

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

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

我正在寻找这样的东西:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM