如果数组键不存在,如何将其设置为空



例如我有一个数组:

array(
    'a' => 'value',
    'b' => 'value',
    'c',
    'd' => 'value',
    'e' => array(
        'f' => 'value',
        'g',
        array(
            'h' => 'value',
            'i'
        )
    ),
    'k',
    'l' => 'value'
);

我需要递归遍历它,如果它不存在,则将key设为NULL:

array(
    'a' => 'value',
    'b' => 'value',
    NULL => 'c',
    'd' => 'value',
    'e' => array(
        'f' => 'value',
        NULL => 'g',
        array(
            'h' => 'value',
            NULL => 'i'
        )
    ),
    NULL => 'k',
    'l' => 'value'
);

我需要这个,因为我需要编码数组在JSON和推到浏览器。问题是,json_encode设置键为0,如果它不存在,但如果有NULL,它也在浏览器中保持不变。所以当我在JS中使用这个数组时,我可以检测到哪里是真正的0,哪里是0被创建的,因为没有键。

键确实存在,它们只是被自动分配并且是数字。源自Arrays

键是可选的。如果没有指定,PHP将使用先前使用的最大整数键的增量。

您无法检测数字键是否被显式分配,或者该键是否被省略。您只能在创建数组或将值附加到数组时执行此操作。之后,您只能用其他值替换数字键。

另外

如果数组声明中的多个元素使用相同的键,则只使用最后一个键,其他所有元素将被覆盖。

这意味着,您不能用NULL替换缺失的键,但只能替换其中一个。如果您设置多个键为NULL,则每次赋值都会删除前一个NULL键/值对。

最后

另外,还会发生以下键强制转换:

  • Null将被强制转换为空字符串,即键Null实际上将存储在"下。

使用array_walk_recursive

array_walk_recursive($array, function (&$value, &$key) {
    $value = NULL; /* for example as you cannot use multiple NULL-keys nor set the key to NULL... */
});

注。:关于为什么不能使用null键的解释,请参阅@OlafDietsche

的帖子

相关内容

  • 没有找到相关文章

最新更新