3v4l.org

run code in 300+ PHP versions simultaneously
<?php $queryBalance=[ (object)["balance"=>"-257,21","id_month"=>12,"year"=>"2017"], (object)["balance"=>"-257,21","id_month"=>1,"year"=>"2018"], (object)["balance"=>"-257,21","id_month"=>2,"year"=>"2018"], (object)["balance"=>"166,66","id_month"=>3,"year"=>"2018"], (object)["balance"=>"55","id_month"=>12,"year"=>"2017"], //(object)["balance"=>"0","id_month"=>1,"year"=>"2018"], (object)["balance"=>"0","id_month"=>2,"year"=>"2018"], (object)["balance"=>"55","id_month"=>3,"year"=>"2018"], (object)["balance"=>"-22257,21","id_month"=>12,"year"=>"2017"], (object)["balance"=>"-64609,14","id_month"=>1,"year"=>"2018"], (object)["balance"=>"-64609,14","id_month"=>2,"year"=>"2018"], (object)["balance"=>"-12234,89","id_month"=>3,"year"=>"2018"] ]; foreach($queryBalance as $row){ $uniques[$row->year.'-'.$row->id_month]=NULL; // determine all unique date groups } while($queryBalance){ $temp=[]; foreach($uniques as $date=>$null){ $first=current($queryBalance); // cache the element that is currently first in $queryBalance $temp[]=($date==$first->year.'-'.$first->id_month) ? array_shift($queryBalance)->balance : NULL; // extract from array, or store NULL without modifying $queryBalance } $result[]=$temp; } var_export($result);

preferences:
25.28 ms | 406 KiB | 5 Q