# Php Program to Efficiently compute sums of diagonals of a matrix

Given a 2D square matrix, find the sum of elements in Principal and Secondary diagonals. For example, consider the following 4 X 4 input matrix.

A00 A01 A02 A03 A10 A11 A12 A13 A20 A21 A22 A23 A30 A31 A32 A33

The primary diagonal is formed by the elements A00, A11, A22, A33.

- Condition for Principal Diagonal: The row-column condition is row = column.

The secondary diagonal is formed by the elements A03, A12, A21, A30. - Condition for Secondary Diagonal: The row-column condition is row = numberOfRows – column -1.

**Examples :**

Input : 4 1 2 3 4 4 3 2 1 7 8 9 6 6 5 4 3 Output : Principal Diagonal: 16 Secondary Diagonal: 20 Input : 3 1 1 1 1 1 1 1 1 1 Output : Principal Diagonal: 3 Secondary Diagonal: 3

**Method 1 (O(n ^ 2) :**

In this method, we use two loops i.e. a loop for columns and a loop for rows and in the inner loop we check for the condition stated above:

## PHP

`<?php` `// A simple PHP program to` `// find sum of diagonals` `$MAX` `= 100;` ` ` `function` `printDiagonalSums(` `$mat` `, ` `$n` `)` `{` ` ` `global` `$MAX` `;` ` ` `$principal` `= 0;` ` ` `$secondary` `= 0;` ` ` `for` `(` `$i` `= 0; ` `$i` `< ` `$n` `; ` `$i` `++) ` ` ` `{` ` ` `for` `(` `$j` `= 0; ` `$j` `< ` `$n` `; ` `$j` `++) ` ` ` `{` ` ` ` ` `// Condition for ` ` ` `// principal diagonal` ` ` `if` `(` `$i` `== ` `$j` `)` ` ` `$principal` `+= ` `$mat` `[` `$i` `][` `$j` `];` ` ` ` ` `// Condition for` ` ` `// secondary diagonal` ` ` `if` `((` `$i` `+ ` `$j` `) == (` `$n` `- 1))` ` ` `$secondary` `+= ` `$mat` `[` `$i` `][` `$j` `];` ` ` `}` ` ` `}` ` ` ` ` `echo` `"Principal Diagonal:"` `, ` ` ` `$principal` `,"` `";` ` ` `echo` `"Secondary Diagonal:"` `, ` ` ` `$secondary` `,"` `";` `}` ` ` `// Driver code` `$a` `= ` `array` `(` `array` `( 1, 2, 3, 4 ), ` ` ` `array` `( 5, 6, 7, 8 ), ` ` ` `array` `( 1, 2, 3, 4 ), ` ` ` `array` `( 5, 6, 7, 8 ));` `printDiagonalSums(` `$a` `, 4);` ` ` `// This code is contributed by ajit` `?>` |

**Output:**

Principal Diagonal:18 Secondary Diagonal:18

This code takes O(n^2) time and O(1) auxiliary space

**Method 2 (O(n) :**

In this method we use one loop i.e. a loop for calculating sum of both the principal and secondary diagonals:

## PHP

`<?php` `// An efficient PHP program ` `// to find sum of diagonals` `$MAX` `= 100;` ` ` `function` `printDiagonalSums(` `$mat` `, ` `$n` `)` `{` ` ` `global` `$MAX` `;` ` ` `$principal` `= 0; ` `$secondary` `= 0; ` ` ` `for` `(` `$i` `= 0; ` `$i` `< ` `$n` `; ` `$i` `++) ` ` ` `{` ` ` `$principal` `+= ` `$mat` `[` `$i` `][` `$i` `];` ` ` `$secondary` `+= ` `$mat` `[` `$i` `][` `$n` `- ` `$i` `- 1]; ` ` ` `}` ` ` ` ` `echo` `"Principal Diagonal:"` `,` ` ` `$principal` `,"` `";` ` ` `echo` `"Secondary Diagonal:"` `, ` ` ` `$secondary` `,"` `";` `}` ` ` `// Driver Code` `$a` `= ` `array` `(` `array` `(1, 2, 3, 4),` ` ` `array` `(5, 6, 7, 8), ` ` ` `array` `(1, 2, 3, 4),` ` ` `array` `(5, 6, 7, 8));` `printDiagonalSums(` `$a` `, 4);` ` ` `// This code is contributed by aj_36 ` `?>` |

**Output :**

Principal Diagonal:18 Secondary Diagonal:18

This code takes O(n) time and O(1) auxiliary space

Please refer complete article on Efficiently compute sums of diagonals of a matrix for more details!