简体   繁体   English

使用foreach创建多维StdClass对象数组

[英]Create multi-dimensional StdClass Object array with foreach

I am trying to create a multi-dimentional StdClass Object, but the output is always from the last loop of the first and second foreach loop, not a collection of all the loops. 我试图创建一个多维的StdClass对象,但是输出始终来自第一个和第二个foreach循环的最后一个循环,而不是所有循环的集合。

Each day should have 3 $exercises inside it. 每一天应该有3个$ exercises。 And there's 5 days, but only 1 day with 1 exercise show up. 有5天,但只有1天有1次锻炼。

Function & current output: http://paste.laravel.com/WIU 功能和当前输出: http : //paste.laravel.com/WIU

It looks like what's happening is that you're overwriting the days attribute of your data object each time you loop. 似乎正在发生的事情是您每次循环都覆盖data对象的days属性。 Instead of a stdClass , $data->days should be an array, and then you should add stdClass objects describing each day to that array...something like this (using part of your code from around line 14): 而不是stdClass$data->days应该是一个数组,然后您应该向该数组添加描述每天的stdClass对象……诸如此类(使用第14行的部分代码):

$data->days = array(); //create the array
foreach ($jsonDays as $day) 
        {
            $newDay = new stdClass(); //create a day object
            $newDay = $day->day; //add things to the day object
            ...
            $data->days[] = $newDay; //push the day object onto your day array.

The same approach would also work for adding multiple exercises to each day. 每天添加多个练习也可以使用相同的方法。

There is no special need for stdObjects when simple objects will serve. 简单对象将投放时,对stdObjects并没有特殊的需求。 Here is a simple multi-dimensional object structure for storing arrays of data. 这是用于存储数据数组的简单多维对象结构。

<?php

//create exercise array: 3 exercise rows x 5 day columns
$ex[0] = ["aa", "ab", "ac", "ad", "ae"];
$ex[1] = ["ba", "bb", "bc", "bd", "be"];
$ex[2] = ["ca", "cb", "cc", "cd", "ce"];

//create your day class for the 3 exercises
class day{
    public $ex0;
    public $ex1;
    public $ex2;
}

//create your period (days) class for all the days
class days{
    public $days;
}

//create objects for each day of exercises and store the exercises
for($i=0;$i<count($ex[0]);$i++){ //for each of 5 days
    $day[$i] = new day();
    $day[$i]->ex0 = $ex[0][$i];//1st exercise of the i_th day
    $day[$i]->ex1 = $ex[1][$i];//2nd exercise of the i_th day
    $day[$i]->ex2 = $ex[2][$i];//3rd exercise of the i_th day
}

//create an object for all the data
$days = new days;

//store the array of day objects with their data in the days object
$days->days = $day;

//confirm object creation and structure
print_r($days);

//check the json_encode result
echo "<br><br>" . (json_encode($days)) . "<br>";

?>

Result: 结果:

days Object ( [days] => Array ( 
[0] => day Object ( [ex0] => aa [ex1] => ba [ex2] => ca ) 
[1] => day Object ( [ex0] => ab [ex1] => bb [ex2] => cb ) 
[2] => day Object ( [ex0] => ac [ex1] => bc [ex2] => cc ) 
[3] => day Object ( [ex0] => ad [ex1] => bd [ex2] => cd ) 
[4] => day Object ( [ex0] => ae [ex1] => be [ex2] => ce ) ) ) 

{"days":[{"ex0":"aa","ex1":"ba","ex2":"ca"}, 
{"ex0":"ab","ex1":"bb","ex2":"cb"},{"ex0":"ac","ex1":"bc","ex2":"cc"}, 
{"ex0":"ad","ex1":"bd","ex2":"cd"},{"ex0":"ae","ex1":"be","ex2":"ce"}]}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM