我想根据同一行中的其他值对返回的SQL对象中的值执行变换/计算。我找不到一个很好的参考,也许我只是不知道我在找什么;似乎大多数函数(例如array_walk)用于将相同的变换应用于整个数组中的所有值?我想有条件地改变某些值。基于同一行中的其他数据修改特定的数组值
这是我的简化尝试;不工作,但我想说明什么,我试图做的:
//------CREATE OBJECT-------//
$sql2 = "select internalname, value, adjboolean, adjfactor
FROM superfilters WHERE id > '0'";
$filterobject = $DBLink->query($sql2);
//------MODIFY OBJECT------//
$input1 = 350;
$input2 = 175;
foreach ($filterobject as $row){
if ($row['adjboolean'] = 1) {
$row['value'] += ($row['value'] * ($input1/$input2 - 1) * $row['adjfactor']);
}
}
试图修改后,不会引发任何错误,但在我行的价值没有影响。我宁愿重写,也不创建重复的数组/对象,但如果需要执行此功能,我可以创建新的。
非常感谢您的帮助!
----编辑---- 好吧,所以我现在已经了解到foreach实际上在我的$ filterobject的副本上工作,并且我必须引用才能修改实际的结果对象。看来下面应该工作
foreach ($filterobject as &$row){
不过,我得到错误“的迭代器不能被引用用foreach使用”。所以,现在我正在努力...
不要忘记'unset($ row);'在那个'foreach'循环之后,否则如果在下面的代码中访问'$ row'时你可能会意想不到的副作用。 – CBroe
好的,所以我想出了Scrowler发布的同时参考问题(谢谢Scrowler)。但是,正如你在我的编辑中看到的那样,它给我留下了另一个我不明白的问题。 – Wavelength
谢谢你的例子,Scrowler,他们很有帮助。我的$ filterobject肯定有些东西是愚蠢的;你的例子中的代码不适合我; foreach方法返回我提到的致命错误,array_walk似乎失败,但没有返回错误。 – Wavelength