Calculations for a square matrix using PHP

2020-05-27 php math matrix

I am a postgraduate student and I have small knowledge of PHP and SQL. I have an square matrix of about 12x12 and I take the data to fill it from an database. My problem is that I need to get all the posible combinations adding one value from each row and PHP takes more than 15 minutes to do it.

What I do, after obtaining the data from the database, is introduce them in 12 arrays, one per each row with 12 values each one, one per each column of the matrix. After that, I basically go into 12 loops, one per each array to add each value with each value of every row. My arrays are from $d0 to $d11



for ($id0=0; $id0<=11; ++$id0){
$v0=$d0[$id0];
for ($id1=0; $id1<=11; ++$id1){
    if ($id1 <> $id0){
        $v1=$v0+$d1[$id1];

        for ($id2=0; $id2<=11; ++$id2){
        if (($id2 <> $id1)&&($id2 <> $id0)) {
            $v2=$v1+$d2[$id2];

            for ($id3=0; $id3<=11; ++$id3){
            if (($id3 <> $id0) && ($id3 <> $id1) && ($id3 <> $id2)) {
                $v3=$v2+$d3[$id3];

                for ($id4=0; $id4<=11; ++$id4){
                if (($id4 <> $id0) && ($id4 <> $id1) && ($id4 <> $id2) && ($id4 <> $id3)) {
                    $v4=$v3+$d4[$id4];

                    for ($id5=0; $id5<=11; ++$id5){
                    if (($id5 <> $id0) && ($id5 <> $id1) && ($id5 <> $id2) && ($id5 <> $id3) && ($id5 <> $id4)) {
                        $v5=$v4+$d5[$id5];

                        for ($id6=0; $id6<=11; ++$id6){
                        if (($id6 <> $id0) && ($id6 <> $id1) && ($id6 <> $id2) && ($id6 <> $id3) &&  ($id6 <> $id4) && ($id6 <> $id5)) {
                            $v6=$v5+$d6[$id6];

                            for ($id7=0; $id7<=11; ++$id7){
                            if (($id7 <> $id0) && ($id7 <> $id1) && ($id7 <> $id2) && ($id7 <> $id3) &&  ($id7 <> $id4) && ($id7 <> $id5) && ($id7 <> $id6)) {
                                $v7=$v6+$d7[$id7];

                                for ($id8=0; $id8<=11; ++$id8){
                                if (($id8 <> $id0) && ($id8 <> $id1) && ($id8 <> $id2) && ($id8 <> $id3) &&  ($id8 <> $id4) && ($id8 <> $id5) && ($id8 <> $id6)  && ($id8 <> $id7)) {
                                    $v8=$v7+$d8[$id8];

                                    for ($id9=0; $id9<=11; ++$id9){
                                    if  (($id9 <> $id1) && ($id9 <> $id2) && ($id9 <> $id3) &&  ($id9 <> $id4) && ($id9 <> $id5) && ($id9 <> $id6) && ($id9 <> $id7)  && ($id9 <> $id8) && ($id9 <> $id0)  ) {
                                        $v9=$v8+$d9[$id9];  

                                        for ($id10=0; $id10<=11; ++$id10){
                                        if  (($id10 <> $id1) && ($id10 <> $id2) && ($id10 <> $id3) &&  ($id10 <> $id4) && ($id10 <> $id5) && ($id10 <> $id6) && ($id10 <> $id7)  && ($id10 <> $id8) && ($id10 <> $id0)  && ($id10 <> $id9) ) {

                                            $v10=$v9+$d10[$id10];   

                                            for ($id11=0; $id11<=11; ++$id11){
                                            if  (($id11 <> $id0)  && ($id11 <> $id1) && ($id11 <> $id2) && ($id11 <> $id3) &&  ($id11 <> $id4) && ($id11 <> $id5) && ($id11 <> $id6) && ($id11 <> $id7)  &&  ($id11 <> $id8) && ($id11 <> $id9) && ($id11 <> $id10) ) {

                                                $v11=$v10+$d11[$id11];  

                                                if ($v11<$best){
                                                    $consumers = $id0.$id1.$id2.$id3.$id4.$id5.$id6.$id7.$id8.$id9.$id10.$id11;
                                                    $best = $v11;
                                                }
                                            }
                                            }
                                        }
                                        }
                                    }
                                    }
                                }
                                }
                            }
                            }
                        }
                        }
                    }
                    }
                }
                }
            }
            }

        }
        }
    }
    }
}
echo $consumers;
echo "</br>";
echo $best;

Could you know please another way to do it and get results faster? The performance is very slow and it takes about 15 minutes on giving me the result. How could I improve the performance?

Sorry to ask here for such a massive help but I dont have too much money to get a mathematician to fix it and I would like to solve it as it would be a big improvement on finishing my PhD.

Answers

Related