Search code examples
phparraysmultidimensional-arrayforeachsum

Sum deep column values of a multidimensional array and map results to another element in the same array


I'm experimenting with arrays in PHP and I am setting up a fake environment where a "team's" record is held in arrays.

$t1 = array (
    "basicInfo" => array (
        "The Sineps",
        "December 25, 2010",
        "lemonpole"
    ),
    "overallRecord" => array (
        0,
        0,
        0,
        0
    ),
    "overallSeasons" => array (
        "season1.cs" => array (0, 0, 0),
        "season2.cs" => array (0, 0, 0)
    ),
    "matches" => array (
        "season1.cs" => array (
            "week1" => array ("12", "3", "1"),
            "week2" => array ("8", "8" ,"0"),
            "week3" => array ("8", "8" ,"0")
        ),
        "season2.cs" => array (
            "week1" => array ("9", "2", "5"),
            "week2" => array ("12", "2" ,"2")
        )
    )
);

What I am trying to achieve is to add all the wins, loss, and draws from all weeks of each season to their respective season total.

For example, the sum of all the weeks in $t1["matches"]["season1.cs"] will be added to $t1["overallSeasons"]["season1.cs"]. The result would leave:

"overallSeasons" => array (
    "season1.cs" => array (28, 19, 1),
    "season2.cs" => array (21, 4, 7)
),

I tried to work this out on my own for the past hour and all I have gotten is a little more knowledge of for-loops and foreach-loops . So I think I now have the basics down such as using foreach loops and so on. However, I am still fairly new to this so bear with me!

I can get the loop to the point of the $t1["matches"] key and go through each season, but I can't seem to figure out how to add all of the wins, loss, and draw, for each individual week.

For now, I'm only looking for answers concerning the overall seasons sum since I can work from there once I figure out how to achieve this.


Solution

  • This should do what you're trying to accomplish, havn't tested it though.

    foreach ($t1['matches'] as $key=>$value){
       $wins = 0;
       $losses = 0;
       $draws = 0;
       foreach($value as $record){
          $wins   += $record[0];
          $losses += $record[1];
          $draws  += $record[2];
       }
    
       $t1['overallSeasons'][$key] = array($wins, $losses, $draws);
    }