我想根據同一行中的其他值對返回的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