You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP嵌套循环中为对象添加bku键值对时无法实现值递增的问题

问题:PHP嵌套循环中为对象添加递增键值对失败

我尝试在PHP的嵌套循环中为对象添加键为bku的键值对,当前使用的循环代码如下:

$newarray = [];
foreach($allJobs as $allJob)
{
 for($i = 0; $i < 2 ; $i++){
    $allJob->bku = $i;
    $newarray[] = $allJob;
 }
}

当前输出结果中,两个对象的bku值均为1:

Array
(
[0] => stdClass Object
    (
        [id] => CFF9B1A6-37B8-4000-B058-03DC648B5289
        [name] => Kreditor rapporter til RE pkt. 5 
        [bku] => 1
    )

[1] => stdClass Object
    (
        [id] => CFF9B1A6-37B8-4000-B058-03DC648B5289
        [name] => Kreditor rapporter til RE pkt. 5 
        [bku] => 1
    )
)

但我期望的输出是bku值依次递增为0和1:

Array
(
[0] => stdClass Object
    (
        [id] => CFF9B1A6-37B8-4000-B058-03DC648B5289
        [name] => Kreditor rapporter til RE pkt. 5 
        [bku] => 0
    )

[1] => stdClass Object
    (
        [id] => CFF9B1A6-37B8-4000-B058-03DC648B5289
        [name] => Kreditor rapporter til RE pkt. 5 
        [bku] => 1
    )
)

解决方法

这是因为PHP中对象是引用传递的,你每次循环修改的都是同一个对象实例,$newarray里保存的都是这个对象的引用。当循环结束时,对象的bku被最后一次赋值为1,所以数组里所有元素的bku都是1。

要解决这个问题,每次循环时都需要克隆一个新的对象实例,再给新对象赋值bku:

$newarray = [];
foreach($allJobs as $allJob)
{
 for($i = 0; $i < 2 ; $i++){
    // 克隆原对象,创建新的实例
    $cloneJob = clone $allJob;
    $cloneJob->bku = $i;
    $newarray[] = $cloneJob;
 }
}

这样$newarray里的每个元素都是独立的对象实例,各自的bku值会是0和1。


内容的提问来源于stack exchange,提问作者Frederik Nielsen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 18:35:15