2012-10-16 45 views
0

我想弄清楚爲什麼我不斷收到一些試圖獲取非對象錯誤的屬性。與我創建的數組。我創建了這個數組,並將它展示出來,並通過我的對象數組的外觀確實存在這些屬性。試圖獲取非對象錯誤的屬性

我收到的錯誤在這方面:

// Separates each of the last 5 pesonal messages 
foreach ($last_5_personal_messages AS $message) 
{ 
    echo '<li>'; 
    echo '<span class="icon avatar"><img src="'.$message->sender_avatar.'" alt="" /></span>'; 
    echo '<span class="name"><a href="'.$site_url.'/personalmessages/viewmessage/'.$message->message_id.'"><strong>'.$message->sender_name.'</strong></a><span class="time">'.$message->datetime_sent.' ago</span></span>'; 
    echo '<span class="msg">'.$message->subject.'</span>'; 
    echo '</li>'; 
} 
?> 


Array 
(
[0] => stdClass Object 
    (
     [message_id] => 1 
     [subject] => Test Message 
     [datetime_sent] => 2 weeks 
     [attachments] => 
     [priority] => 0 
     [message_content] => Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 
     [message_read] => 0 
     [is_favorite] => 0 
     [sender_name] => Mike Scott 
     [sender_email_address] => [email protected] 
     [sender_avatar] => http://dev.myserver.com/assets/themes/supr/images/avatars/avatar5.jpg 
    ) 

[1] => stdClass Object 
    (
     [message_id] => 2 
     [subject] => Testing PM Message 
     [datetime_sent] => 3 weeks 
     [attachments] => Array 
      (
       [0] => Array 
        (
         [file_name] => file1.jpg 
         [is_file] => 1 
         [file_size] => 7.01 KB 
         [file_location] => assets/downloads/file1.jpg 
        ) 

       [1] => Array 
        (
         [file_name] => file2.jpg 
         [is_file] => 
        ) 

       [2] => Array 
        (
         [file_name] => file3.jpg 
         [is_file] => 
        ) 

      ) 

     [priority] => 0 
     [message_content] => This is jsut a test of the personal message system! 
     [message_read] => 0 
     [is_favorite] => 0 
     [sender_name] => Kevin Scott 
     [sender_email_address] => [email protected] 
     [sender_avatar] => http://dev.myserver.com/assets/themes/supr/images/avatars/avatar5.jpg 
    ) 

[2] => stdClass Object 
    (
     [message_id] => 3 
     [subject] => Testing Whatever 
     [datetime_sent] => 1 week 
     [attachments] => 
     [priority] => 0 
     [message_content] => Testing Message Content 
     [message_read] => 0 
     [is_favorite] => 0 
     [sender_name] => Frank Scott 
     [sender_email_address] => [email protected] 
     [sender_avatar] => http://dev.myserver.com/assets/themes/supr/images/avatars/avatar.jpg 
    ) 

[total_unread_messages] => 3 
) 

回答

1

GBD是對的,這是因爲total_unread_messages鍵doe s不包含一個對象作爲它的值,所以你會得到這個警告。

如果您不希望在每個循環迭代中檢查if(is_object()),那麼您也可以使用total_unread_messages內的信息手動迭代該陣列。像這樣的東西應該工作:

for($i = 0; $i < $last_5_personal_messages['total_unread_messages'] && $i < 5; $i++) { 
    $message = $last_5_personal_messages[$i]; 
    echo '<li>'; 
    // .... 
} 

或者你遍歷(和可選把它放回去,當你完成),然後才能unset()該值:

unset($last_5_personal_messages['total_unread_messages']); 
foreach($last_5_personal_messages as $message) { 
    // ... 
} 
+0

雖然只有一個問題。總未讀消息密鑰不僅僅是最後5個消息。我應該拿出那個鑰匙,然後以不同的方式傳遞價值嗎? – user1724167

+0

所以如果它大於'5',經過5次迭代後跳出循環 - 如果超過5條消息,我編輯了我的答案來停止循環。 – nickb

+0

+1 @nickb好的一個 – GBD

1

因爲你身上有數組鍵「total_unread_messages」不具有對象值,因此跳過該值,而的foreach

foreach ($last_5_personal_messages AS $message) 
{ 
    if(!is_object($message)){ 
     continue; 
    } 
    echo '<li>'; 
    echo '<span class="icon avatar"><img src="'.$message->sender_avatar.'" alt="" /></span>'; 
    echo '<span class="name"><a href="'.$site_url.'/personalmessages/viewmessage/'.$message->message_id.'"><strong>'.$message->sender_name.'</strong></a><span class="time">'.$message->datetime_sent.' ago</span></span>'; 
    echo '<span class="msg">'.$message->subject.'</span>'; 
    echo '</li>'; 

} 

另一種方式

for($i=0;$i<$last_5_personal_messages['total_unread_messages'];$i++) 
{ 
    $message = $last_5_personal_messages[$i]; 

    echo '<li>'; 
    echo '<span class="icon avatar"><img src="'.$message->sender_avatar.'" alt="" /></span>'; 
    echo '<span class="name"><a href="'.$site_url.'/personalmessages/viewmessage/'.$message->message_id.'"><strong>'.$message->sender_name.'</strong></a><span class="time">'.$message->datetime_sent.' ago</span></span>'; 
    echo '<span class="msg">'.$message->subject.'</span>'; 
    echo '</li>'; 
} 
+0

偉大的答案。不過,謝謝,還有更好的方法,我應該把這個值添加到數組中,這樣我就不必擔心這樣做。 – user1724167

相關問題