我想將數據導出到分析中,但我做錯了什麼。如何在對象上分配迭代屬性/變量?
基本上我有一個report
有1和9 subject
s。 我從頭開始編寫這個導出工具,數據來自遺留系統。
分析應導出爲CSV,與像列:
'report_id';'subject0';'subject1'
...一路'subject9'
我試圖foreach
-ing上的報告主體的陣列,並保持數:
$iterator=0;
foreach ($subjects as $subject)
{
$this->analysis [$report_id] ->subject${iterator} = (string)$subject;
$iterator++;
}
更新 因爲我可以不上的箭頭操作的右側使用變量,我已經重寫它作爲一個非常不DRY開關:
$iterator = 0;
foreach ($categories as $subject)
{
switch ($iterator)
{
case 0:
$this->analysis [$report_id] ->subject0 = $subject;
break;
case 1:
$this->analysis [$report_id] ->subject1 = $subject;
break;
case 2:
$this->analysis [$report_id] ->subject2 = $subject;
break;
// I have 6 more cases, just to fill all 9 subjects, snipped for brevity
default:
//some errorhandling //snipped for brevity
break 2;
}
$iterator++;
}
$this->analysis [$report_id]
是存儲字符串如下的對象:
$this->analysis [$report_id] ->subject0 = "foo"
的$report_id
是較早循環的結果。
$this->analysis
是一個填充了分析中包含的(report
)對象的數組。
我希望任何人都能找到這個缺陷,並指引我干預我的實施。它背後的哲學的加分點,這樣我不僅幫助解決了這個問題,而且更好地理解了oop-php世界。
如果你不告訴我們'$ this-> analysis [$ report_id]'是什麼,那麼給你一個答案是不可能的。 '$ this-> analysis [$ report_id] - > subject $ {iterator} = $ subject;'是非常不規則的,但它在某些特定情況下可能是有效的代碼。你認爲'申請書寫程序式'是什麼意思? – yannis
需要更多:'$ this-> analysis [$ report_id]'絕不是'標準對象'。如果它是一個對象,那麼它就是實現[ArrayAccess接口](http://www.php.net/manual/en/class.arrayaccess.php)的對象。或者它可能是一個簡單的數組。 '$ this->分析[$ report_id] - > subject0 =「foo」'這是否工作?您可能會在代碼中看到它,但是您是否驗證了它的工作原理?有兩種方法可以解決這個問題:1)'$ this-> analysis [$ report_id]'中的對象具有每個主題的公共屬性,或者2)它使用魔術設置器。 – yannis
在任何情況下,這不是標準的行爲,你必須確定它的工作原理。 「 - 之後的部分不起作用。」是什麼意思?你是否收到錯誤或通知(你應該在E_ALL上有[error_reporting](http://php.net/manual/en/function.error-reporting.php)來查看通知) - 或者它只是不起作用,即沒有錯誤,但當你檢查'$ this-> analysis [$ report_id]'時,它只是不包含你給它的值? – yannis