2

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

2 Answers 2

5

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.

Sign up to request clarification or add additional context in comments.

Comments

0

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"}]}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.