首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在PHP中根据引用赋值

如何在PHP中根据引用赋值
EN

Stack Overflow用户
提问于 2018-08-11 07:10:36
回答 1查看 53关注 0票数 1

当我有一个引用但不能硬编码键值时,我如何给关联数组赋值?

情况:

我有一个未知深度的关联数组,我必须遍历它。分支的末尾是一个数组,我必须将其求和并分配回该分支。

代码语言:javascript
复制
$array = [
    foo => [
        a => [1, 2],
        b => [3, 4]
    ];
$pointer =& $array['foo']['b']; //in live the keys are variable.
$pointer = array_sum($pointer);

我想要的是$array现在的样子:

代码语言:javascript
复制
[
    foo => [
        a => [1,2],
        b => 7
    ]
] 

但是,上面的代码创建了一个值为7的新变量$pointer,而没有更改$array。如何仅使用指针更新$array['foo']['b']?我可能会找出涉及的键,但它们是可变的,所以我不确定这是否有帮助。

--编辑:

用户jh1711指出,我的代码片段确实可以工作。事实证明,我的代码中的问题就在此之前,我复制了引用。

这不起作用:

代码语言:javascript
复制
$pointer =& $mainPointer[$key];

这是可行的:

代码语言:javascript
复制
$pointer =& $mainPointer;
$pointer =& $pointer[$key];

我不太确定第一个失败的原因,但我的代码现在可以工作了!

EN

回答 1

Stack Overflow用户

发布于 2018-08-11 09:05:55

这是你第一次尝试失败的原因。请参见注释。

下面是糟糕的代码。

代码语言:javascript
复制
$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

下面是正确的代码。

代码语言:javascript
复制
$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)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51795018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档