0

例如我有一个数组:

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如果不存在,sets 键为 0,但如果存在,NULL它在浏览器中也保持不变。所以当我在 JS 中使用这个数组时,我可以检测到真正的 0 在哪里以及在哪里创建了 0,因为没有密钥。

4

2 回答 2

2

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

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

您无法检测到数字键是明确分配的还是只是被省略了。您只能在创建数组或将值附加到数组时执行此操作。之后,您只能将数字键替换为其他值。

此外

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

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

最后

此外,还会发生以下关键转换:

  • Null 将被强制转换为空字符串,即键 null 将实际存储在 "" 下。
于 2013-04-18T21:16:49.640 回答
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... */
});

Ps:有关为什么不能使用 NULL 键的解释,请参阅@OlafDietsche 的帖子

于 2013-04-18T21:14:33.437 回答