我正在尝试根据同一行中的其他值对返回的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']);
}
}
尝试修改后,不会抛出任何错误,但对我的行值没有影响。我更喜欢覆盖,而不是创建一个重复的数组/对象,但如果有必要,我可以创建新的来执行该功能。
非常感谢您的帮助!
---- ---- EDIT 好的,所以我现在知道foreach实际上是在我的$ filterobject的副本上工作,我必须引用以修改实际的结果对象。以下似乎应该有效
foreach ($filterobject as &$row){
但是,我得到错误"迭代器不能与foreach一起使用#34;。所以,现在我正在努力......
答案 0 :(得分:0)
您需要添加&
以便通过引用更新$row
,否则每次循环时它都会被覆盖,并且不会在foreach之外保留。
另外,我认为你的adjboolean
检查应该是比较而不是作业?使用==
代替=
。
foreach ($filterobject as &$row){
if ($row['adjboolean'] == 1) {
$row['value'] += ($row['value'] * ($input1 / $input2 - 1) * $row['adjfactor']);
}
}
仅供参考,array_walk()
也会行走,你只需要use
你的外部变量就可以在回调范围内访问它们了:
array_walk(
$filterobject,
function(&$row, $key) use($input1, $input2) {
if ($row['adjboolean'] == 1) {
$row['value'] += ($row['value'] * ($input1 / $input2 - 1) * $row['adjfactor']);
}
}
);