gpt4 book ai didi

PHP:循环中的array_push仅导致最后一条记录重复

转载 作者:行者123 更新时间:2023-12-03 04:30:39 26 4
gpt4 key购买 nike

我以为我有一些基本的 PHP 技能,至少足以进行简单应用程序的开发,但我发现自己陷入了非常基本的数组操作问题。

我在 $results 变量上设置了curl 操作的结果。为了更简单的代码,(怪我它太原始了。),我使用基本循环来循环 $results 变量,以产生下一个操作所需的结果。

$data = array();
for ($i = 0; $i < count($results); $i++) {
$row = $results[$i];
$atom->objectId = $row['objectId'];
$atom->username = $row['username'];
array_push($data, $atom);
}
var_dump(json_encode($data));

示例数据:

{ 
[0] => { ["objectId"]: "12345", ["username"]: "user1" },
[1] => { ["objectId"]: "12567", ["username"]: "user2" },
[2] => { ["objectId"]: "12789", ["username"]: "user3" },
[3] => { ["objectId"]: "13579", ["username"]: "user4" }
}

你可以简单地算出预期的输出,但实际的输出结果是:

[
{ "objectId": "13579", "username": "user4" },
{ "objectId": "13579", "username": "user4" },
{ "objectId": "13579", "username": "user4" },
{ "objectId": "13579", "username": "user4" }
]

知道为什么这会给我带来荒谬的结果吗?任何帮助,将不胜感激。提前致谢。

最佳答案

您的代码现在正在做什么:

每次循环,它都会更改一个对象的属性,并将该对象的引用(按值传递,但值是引用。)附加到$data 数组,因此 $data 数组中有 4 个点指向仅一个对象。每次循环时,都会更改值,最后一次分配的值是最后一个值。这就是为什么您的所有值(value)观都是相同的。

你想做什么:

每次迭代时都会使用数据创建一个新对象,并每次都指向新对象。

其他解决方案:

如果您只想要一个包含值的数组,而不是对对象的引用(如您的输出),您可以尝试以下操作:

$data = array();
for ($i = 0; $i < count($results); $i++) {
$row = $results[$i];
$data[$i]['objectId'] = $row['objectId'];
$data[$i]['username'] = $row['username'];
}
var_dump(json_encode($data));

关于PHP:循环中的array_push仅导致最后一条记录重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22468070/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com