PHP array_merge替换现有的数组值

时间:2014-12-29 19:05:13

标签: php arrays pdo

我在使用PDO从数据库中获取某些PHP代码时出现问题,我想知道是否有人可以帮助我。我有一个类从数据库中获取事件并将结果返回到数组中。

代码的相关部分是:

$seminars = array();

$sql = 'select * from seminars';
$stmt = $this->dbconn->query($sql);
$stmt->setFetchMode(PDO::FETCH_INTO, new SeminarEvent);

foreach($stmt as $seminar) {
        echo "<p>Seminar Row: ".var_dump($seminar)."</p>"; // Prints the unique row
        $seminars[] = $seminar;
        echo "<p>";var_dump($seminars);echo "</p>"; // Debug
}

(SeminarEvent是我编写的一个课程,其中包含有关getter和setter的相关字段,已包含在标题中)

我在php.net上看到的文档是$ array [] = $ elem和array_push($ array,$ elem)都将$ elem添加到数组的END中,所以我尝试使用两者和我得到了同样的结果:

对我来说问题的部分是向数组添加$ seminar正在替换整个数组中的所有值。使用array_merge时也会发生这种情况。 var_dump的输出显示数组大小增加1(如预期的那样),但每次我向数组添加项时,所有值都将替换为新插入的项。我在另一台服务器上尝试过这段代码,得到完全相同的结果。

我在这里错过了一些简单的东西吗?

编辑: 我添加了一个额外的行来打印foreach循环中的当前$研讨会,每次输出都不同所以$ seminar正确引用语句中的每一行但是$ seminars数组只包含添加到的最后一项数组。

1 个答案:

答案 0 :(得分:0)

我认为这是因为SeminarEvent创建了一次并且由指针使用,因此每次填充相同的对象并且每次将相同的链接保存到数组时。因此,一个可能的解决方案是编写$seminars[] = clone $seminar;而不是$seminars[] = $seminar;