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

时间:2013-04-18 21:09:03

标签: php arrays multidimensional-array

例如我有一个数组:

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

如果它不存在,我需要递归地遍历它并将键设置为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。

2 个答案:

答案 0 :(得分:2)

密钥确实存在,它们只是自动分配并且是数字的。来自Arrays

  

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

如果明确指定了数字键或者刚刚省略了键,则无法检测到。您只能在创建数组或将值附加到数组时执行此操作。之后,您只能用其他值替换数字键。

另外

  

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

这意味着,您无法用NULL替换丢失的键,但只能替换其中一个。如果您将多个密钥设置为NULL,则每个分配都会删除之前的NULL密钥/值对。

最后

  

此外还会发生以下关键演员:

     
      
  • Null将被强制转换为空字符串,即密钥null实际上将存储在“”。
  • 下   

答案 1 :(得分:0)

使用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... */
});

P.s。:要解释为什么你不能使用NULL键,请参阅@OlafDietsche的帖子