Reputation: 4807
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.
Each day should have 3 $exercises inside it. And there's 5 days, but only 1 day with 1 exercise show up.
Function & current output: http://paste.laravel.com/WIU
Upvotes: 2
Views: 9510
Reputation: 1
There is no special need for stdObjects when simple objects will serve. 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"}]}
Upvotes: 0
Reputation: 1360
It looks like what's happening is that you're overwriting the days
attribute of your data
object each time you loop. 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):
$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.
Upvotes: 5