2011-09-16 200 views
0

我該如何獲取從對象方法返回的值並將其放入數組中。代碼如下:將值添加到數組

$additionalTestConfirmation = array(); 

$additionalTests = $this->getAdditionalTestsSelected(); 


foreach($additionalTests as $availableTest) 
{ 
    $additionalTestConfirmation = $availableTest->getName(); 

} 

$appointment = $this->getAppointment(); 

$tokens = array(
    '%DATE%' => $this->getAppointment()->getDate(), 
    '%LOCATION%' => $this->getAppointment()->getLocation(), 
    '%TIME%' => $this->getTime(), 
    '%ROOM%' => $this->getRoom(), 
    '%NAME%' => ($this->getUser() ? $this->getUser()->getFullName() : null), 
    '%TZ%' => $this->getAppointment()->getShowTimeZone() ? $this->getAppointment()->getTimeZone() : '', 
    '%AdditionalTestsSelected%' => $additionalTestConfirmation, 
); 

對於以上驗證碼,我得到了系統錯誤消息:注意:Array對/用戶/ alexhu /的NetBeansProjects /動物園/ SVN /中繼/應用/前端/模塊串轉換/legacy/legacy_lib/lib/classes/AppointmentTime.php on line 379. 如何避免這種情況,並獲得我想要的$ availableTest-> getName()返回的值。感謝

+0

什麼是379行?你的問題標題與你的問題實際上有什麼關係? – hakre

+0

您一直在問關於您現在爲期2天所做的每一步的問題。我可以建議你學習PHP,然後在你有明確的問題時回來嗎? –

+0

編輯文本編輯器(例如vim,emacs)可以在編輯時顯示行號,例如,如果您想知道哪一行是第379行,這非常有用(特別是如果您想要將相關代碼片段一個SO問題)。花一些時間用你的文本編輯器構建專業知識,你會讓你的程序員更容易生活。 – Peter

回答

0

當分配元件的陣列,則必須指定一個索引,或者使用空的方括號([])添加項目:

foreach($additionalTests as $availableTest) { 
    $additionalTestConfirmation[] = $availableTest->getName(); 
    // or array_push($additionalTestConfirmation, $availableTest->getName()); 
    // see: http://us3.php.net/array_push 
} 

見文檔的更多:http://php.net/manual/en/language.types.array.php

EDIT

而且,在這條線:

'%AdditionalTestsSelected%' => $additionalTestConfirmation, 

...你正在向這個索引傳遞一個數組。如果後綴代碼期望這是一個字符串,那可能會導致錯誤。 * 這不會導致錯誤 - 將數組放入另一個數組是完全可以接受的。正如我所提到的那樣,這實際上取決於使用$tokens數組的代碼將執行和期望的內容。如果預計爲AdditionalTestsSelected指數純字符串,則可能需要這樣做:

'%AdditionalTestsSelected%' => implode(',', $additionalTestConfirmation) 

...使值以逗號分隔的列表。

另請注意,在該行的結尾處有一個額外的逗號。

+0

感謝您的回覆。但我仍然有錯誤。我認爲這是關於'%AdditionalTestsSelected%'=> $ additionalTestConfirmation –

+0

請參閱編輯。 –

+0

非常感謝。我解決了這個問題 –

0
foreach($additionalTests as $availableTest) 
{ 
    $additionalTestConfirmation[] = $availableTest->getName(); 

} 
您的評論後

我建議你:

$appointment = $this->getAppointment(); 

$token = array(
    '%DATE%' => $appointment->getDate(), 
    '%LOCATION%' => $appointment->getLocation(), 
    '%TIME%' => $this->getTime(), 
    '%ROOM%' => $this->getRoom(), 
    '%NAME%' => ($this->getUser() ? $this->getUser()->getFullName() : null), 
    '%TZ%' => $appointment->getShowTimeZone() ? $appointment->getTimeZone() : '' 
); 

$tokens = array(); 

$additionalTests = $this->getAdditionalTestsSelected(); 

foreach($additionalTests as $availableTest) 
{ 
    $token['%AdditionalTestsSelected%'] = $availableTest->getName(); 
    $tokens[] = $token; 
} 

// here comes logic for all tokens 
+0

我仍然收到相同的錯誤消息。最重要的是將正確的值放入數組$ token中,而不僅僅是從$ availableTest-> getName()中獲取值 –

+0

存在邏輯問題。你有幾個「availableTest」,但是「令牌」只有一個條目。因此,要麼循環「foreach($ additionalTests as ...」)內的完整過程,要麼創建一個令牌數組。 – roselan

+0

謝謝,我解決了問題 –

1

爲了增加每個$ availableTest->的getName()你需要你的陣列和上使用[]數組$ additionalTestConfirmation賦值運算符=

foreach($additionalTests as $availableTest) 
{ 
    $additionalTestConfirmation[] = $availableTest->getName(); 

} 

您也可以使用該功能array_push

+0

我仍然得到相同的錯誤消息:在/ Users/alexhu/NetBeansProjects/menagerie/svn/trunk/apps/frontend/modules/legacy /legacy_lib/lib/classes/AppointmentTime.php在線379 –