当我有一个引用但不能硬编码键值时,我如何给关联数组赋值?
情况:
我有一个未知深度的关联数组,我必须遍历它。分支的末尾是一个数组,我必须将其求和并分配回该分支。
$array = [
foo => [
a => [1, 2],
b => [3, 4]
];
$pointer =& $array['foo']['b']; //in live the keys are variable.
$pointer = array_sum($pointer);
我想要的是$array
现在的样子:
[
foo => [
a => [1,2],
b => 7
]
]
但是,上面的代码创建了一个值为7的新变量$pointer
,而没有更改$array
。如何仅使用指针更新$array['foo']['b']
?我可能会找出涉及的键,但它们是可变的,所以我不确定这是否有帮助。
--编辑:
用户jh1711指出,我的代码片段确实可以工作。事实证明,我的代码中的问题就在此之前,我复制了引用。
这不起作用:
$pointer =& $mainPointer[$key];
这是可行的:
$pointer =& $mainPointer;
$pointer =& $pointer[$key];
我不太确定第一个失败的原因,但我的代码现在可以工作了!
发布于 2018-08-11 09:05:55
这是你第一次尝试失败的原因。请参见注释。
下面是糟糕的代码。
$array = [
'foo' => [
'a' => [1, 2],
'b' => [3, 4]
]
];
$pointer =& $array['foo']['b']; // $pointer now has type array
$pointer = array_sum($pointer); // $pointer now has type integer, so no array assignment
下面是正确的代码。
$pointer =& $array['foo']['b']; // $pointer now has type array
$sum = array_sum($pointer); // $sum is type integer
$pointer = $sum; // assign integer $sum to array $pointer
这是工作中偷偷摸摸的PHP动态输入。array_sum();
返回整数类型,在此过程中还会将$pointer转换为整数类型,从而阻止正确的数组赋值。如果有疑问,请在调试时在赋值后使用gettype($value)
。
https://stackoverflow.com/questions/51795018
复制相似问题