例如我有一个数组:
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