根据相同 "row" 中的其他值更改特定数组值
Alter specific array values based on others in same "row"
我正在尝试根据同一行中的其他值对返回的 SQL 对象中的值执行 transformation/calculation。我找不到很好的参考,也许我只是不知道我在找什么;似乎大多数函数(例如 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']);
}
}
尝试修改后,没有报错,但对我的行值没有影响。我更愿意覆盖,而不是创建副本 array/object,但如果需要执行该功能,我可以创建新的。
非常感谢您的帮助!
----编辑----
好的,所以我现在了解到 foreach 实际上在我的 $filterobject 的副本上工作,我必须引用才能修改实际的结果对象。似乎以下应该有效
foreach ($filterobject as &$row){
但是,我收到错误 "An iterator cannot be used with foreach by reference"。所以,现在我正在努力...
你需要添加一个&
来让$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']);
}
}
);
我正在尝试根据同一行中的其他值对返回的 SQL 对象中的值执行 transformation/calculation。我找不到很好的参考,也许我只是不知道我在找什么;似乎大多数函数(例如 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']);
}
}
尝试修改后,没有报错,但对我的行值没有影响。我更愿意覆盖,而不是创建副本 array/object,但如果需要执行该功能,我可以创建新的。
非常感谢您的帮助!
----编辑---- 好的,所以我现在了解到 foreach 实际上在我的 $filterobject 的副本上工作,我必须引用才能修改实际的结果对象。似乎以下应该有效
foreach ($filterobject as &$row){
但是,我收到错误 "An iterator cannot be used with foreach by reference"。所以,现在我正在努力...
你需要添加一个&
来让$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']);
}
}
);