例如我有一个数组:
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。
答案 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的帖子