【问题标题】:Trouble making foreach loop for multi-dimensional array with StdClass Objects使用 StdClass 对象为多维数组制作 foreach 循环时遇到问题
【发布时间】:2016-11-07 09:39:05
【问题描述】:

我正在学习 PHP 和 code igniter,一般来说是现代编程的新手,所以请善待!

我编写了一个函数来从 mysql 表中生成每周骑自行车的总公里数。我的函数是用标准类对象生成一个多维数组。当我尝试在视图文件中回显结果时,出现错误:错误:消息: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" } } }

我的主要问题是如何修复我的视图文件代码以正确输出此数组中的数字。但是,如果我可以用不同的方式编写函数来生成常规关联数组,我也很想知道!

任何帮助将不胜感激!

【问题讨论】:

    标签: php mysql arrays codeigniter multidimensional-array


    【解决方案1】:

    这应该可以解决问题:

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

    您可以使用 $object->property 语法访问 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
    }
    

    【讨论】:

    • 太棒了,格里斯。谢谢!这现在完美无缺。我曾尝试过类似 $object->property 的方法,但我不知道指定零键。我的表格现在显示完美,所以现在,下一步将其制作成条形图!还要感谢您提供更简洁的代码。我要玩这个,看看它是如何工作的;看起来是另一种使用 $object->property 来帮助学习它的好方法。我们这些自学的人真的很欣赏你这样深思熟虑的答案!
    • 替代代码最初生成了“尝试获取非对象的属性”的错误消息。然后我添加了零键,效果很好!所以控制器代码的最后一行变成:$bikedata['sums_for_table'][$weeknumber] = $weekResult[0]->distance;
    猜你喜欢
    • 2013-10-12
    • 2010-10-31
    • 2015-09-21
    • 2012-04-06
    • 2012-04-05
    • 2013-05-29
    • 1970-01-01
    • 2013-12-10
    • 1970-01-01
    相关资源
    最近更新 更多