2016-07-05 58 views
1

我正在學習PHP和代碼點火器,並且對於現代編程一般都很陌生,所以請客氣一點!使用StdClass對象製作多維數組的foreach循環麻煩

我寫了一個函數,可以從mysql表中生成每週騎自行車總里程數。我的功能是用Std Class對象生成一個多維數組。當我嘗試在我的視圖文件中回顯結果時,出現錯誤:錯誤:消息:類stdClass的對象無法轉換爲字符串。

我已經試過如何在約10個線程中對多維數組進行foreach循環,包括this one。看來我需要一個嵌套的foreach結構,但是,我不理解如何將這些示例應用於我的代碼。

//在我的控制器指數函數

$weeknumber = array(0, 1, 2, 3, 4, 5, 6, 7); 
$bikedata['sums_for_table'] = array_map(array($this->bike_model, 
    'get_weekly_sum'), $weeknumber); 

//在我的模型

public function get_weekly_sum($when) 
{ 
    $this->db->select_sum('distance'); 
    $this->db->where("WEEK (date) = WEEK(current_date) - $when AND YEAR(date) = YEAR(current_date)"); 
    $query = $this->db->get('bike_stats'); 

return $query->result(); 

//在我看來(修剪簡單,它實際上是一個表)。

foreach ($sums_for_table as $sum_array): 
foreach ($sum_array as $key => $object): 
echo $object; 
endforeach; 
endforeach; 

函數正常工作,函數返回的數組(下面,來自var_dump)具有信息I w螞蟻(數字63.2等),但我無法理解如何使用這種形式的信息。

array(8) { 
[0]=> array(1) { [0]=> object(stdClass)#23 (1) { ["distance"]=> string(4) "63.2" } } 
[1]=> array(1) { [0]=> object(stdClass)#24 (1) { ["distance"]=> string(5) "111.9" } } 
[2]=> array(1) { [0]=> object(stdClass)#25 (1) { ["distance"]=> string(4) "48.2" } } 
[3]=> array(1) { [0]=> object(stdClass)#26 (1) { ["distance"]=> NULL } } 
[4]=> array(1) { [0]=> object(stdClass)#27 (1) { ["distance"]=> string(4) "26.7" } } 
[5]=> array(1) { [0]=> object(stdClass)#28 (1) { ["distance"]=> string(4) "42.2" } } 
[6]=> array(1) { [0]=> object(stdClass)#29 (1) { ["distance"]=> string(4) "32.3" } } 
[7]=> array(1) { [0]=> object(stdClass)#30 (1) { ["distance"]=> string(4) "10.9" } } } 

我的主要問題是我如何修復我的視圖文件代碼,以正確輸出數組中的數字。但是,如果我可以用不同的方式編寫我的函數來生成常規關聯數組,我也很想知道這一點!

任何幫助將不勝感激!

回答

1

這應該做的伎倆:

foreach ($sums_for_table as $entry) { 
     $distance = $entry[0]->distance; 
     echo $distance . ' <br />'; 
    } 

您可以通過使用$對象 - >屬性語法訪問stdClass的對象的屬性。

我不知道該怎麼所有代碼​​的工作,因爲我沒有看到這一切,但一個更清潔的方式,你可以嘗試:

// controller 
$bikedata['sums_for_table'] = []; 
$weeknumbers = array(0, 1, 2, 3, 4, 5, 6, 7); 
foreach ($weeknumbers as $weeknumber) { 
    $weekResult = $this->bike_model->get_weekly_sum($weeknumber); 
    $bikedata['sums_for_table'][$weeknumber] = $weekResult[0]->distance; 
} 

// view 
foreach ($sums_for_tables as $weekNumber => $distance) { 
    // draw your table here 
} 
+1

真棒,格里斯。謝謝!這現在完美。我曾嘗試過一些沿着$ object->屬性的行,但我不知道指定零的關鍵字。我的桌子現在正在完美顯示,所以現在,進入下一步,將其製作成條形圖!並且還要感謝您提供更簡潔的代碼。我會玩這個,看看它是如何工作的;看起來是另一種使用$ object-> property來幫助學習的好方法。我們這些正在學習的人真的很喜歡像你這樣的深思熟慮的答案! – Cyclist

+0

備用代碼最初生成一條錯誤消息「嘗試獲取非對象的屬性」。然後我添加了零的關鍵,它工作得很好!因此,控制器代碼的最後一行變爲:$ bikedata ['sums_for_table'] [$ weeknumber] = $ weekResult [0] - > distance; – Cyclist