使用StdClass对象制作多维数组的foreach循环时出现问题

时间:2016-07-05 13:55:08

标签: php mysql arrays codeigniter multidimensional-array

我学习PHP和代码点火器,对现代编程很新,所以请善待!

我编写了一个函数,用于从mysql表生成骑自行车的每周总公里数。我的函数是使用Std Class对象生成一个多维数组。当我尝试在视图文件中回显结果时,我收到错误:错误:消息:类stdClass的对象无法转换为字符串。

我已经尝试了如何在大约十个线程中为多维数组创建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)具有我想要的信息(数字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 个答案:

答案 0 :(得分:1)

这应该可以解决问题:

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

您可以使用 $ object-&gt;属性语法访问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
}