Get sum of an entire row, diagonal & entire column in two dimensional array PHP -
so 2 dimensional array looks this:
0 1 2 3 4 5 6 7 ------------------ 0| 0 0 0 0 0 0 0 0 1| 0 0 1 0 0 0 0 0 <-- sum of row 1 2| 0 0 0 0 0 0 0 0 3| 0 0 0 0 0 0 0 0 4| 0 0 0 0 0 0 0 0 5| 0 0 0 0 0 0 0 0 6| 0 0 0 0 0 0 0 0 <-- sum of diagonal row 1 7| 0 0 0 0 0 0 0 0 ^ sum of column 1 now can sum of row doing:
$sumrow = array_sum($board[1]); //is equal 1 but can not figure out how sum of column or diagonal without doing loop. know need utilize loop sum of diagonal, there way sum of column without loop? or efficient possible?
$sumcol = array_sum($board[][2]); //something $sumdiag = ?
example of how sum of row, column , diagonal. thought split array in examples:
diagonal +1 diagonal -2 0 |0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 |0 1 0 0 0 0 0 _0_0_1_0_0_0 0 0 0 |0 0 0 0 0 0 0 0 0 0 0 0 0| 0 0 0 |0 0 0 0 0 0 0 0 0 0 0 0 0| 0 0 0 |0 0 0 0 0 0 0 0 0 0 0 0 0| 0 0 0 |0 0 0 0 0 0 0 0 0 0 0 0 0| 0 0 0 |0_0_0_0_0_0_0_ 0 0 0 0 0 0| 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0| 0 0that way easy diagonal sum of diagonal simple array_walk:
$row_sum = function( $array, $row ) { homecoming array_sum( $array[$row] ); }; $column_sum = function( $array, $column ) { homecoming array_reduce( $array, function( $r, $i ) utilize ( $column ) { homecoming $r += $i[$column]; }); }; /** * @param int $diagonal ( positive , negative ) */ $diagonal_sum = function( $array, $diagonal ) { $slice = array_map( function($i) utilize ($diagonal) { homecoming $diagonal < 0 ? array_slice($i, 0, $diagonal) : array_slice($i, $diagonal); }, $diagonal > 0 ? array_slice($array, 0, -$diagonal) : array_slice($array, abs($diagonal))); array_walk( $slice, function( &$item, $key ) { $item = $item[$key]; }); homecoming array_sum( $slice ); }; $array = array_map( function() { homecoming array_fill( 0, 8, 0 ); }, array_fill( 0, 8, 0 ) ); $array[1][2] = 1; echo $row_sum( $array, 1 ); echo $column_sum( $array, 2 ); echo $diagonal_sum( $array, 1 ); php arrays
No comments:
Post a Comment