2016-07-05 61 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