Skip to main content

Spiral traversal of matrix in php

Php program for Spiral traversal of matrix. Here problem description and other solutions.

<?php
// Php program for 
// Spiral form of matrix
class SpiralView
{
	public	function spiral($data, $startRow, 
                             $startCol, $endRow, 
                             $endCol, $element)
	{
		// Left to right
		for ($i = $startCol; $i <= $endCol && $element > 0; ++$i)
		{
			$element--;
			printf("%s", "  ".strval($data[$startRow][$i]));
		}
		// Top to down
		for ($i = $startRow + 1; $i <= $endRow && $element > 0; ++$i)
		{
			$element--;
			printf("%s", "  ".strval($data[$i][$endCol]));
		}
		// Bottom right to bottom-left
		for ($i = $endCol - 1; $i >= $startCol && $element > 0; --$i)
		{
			$element--;
			printf("%s", "  ".strval($data[$endRow][$i]));
		}
		// Bottom left to top
		for ($i = $endRow - 1; $i > $startRow && $element > 0; --$i)
		{
			$element--;
			printf("%s", "  ".strval($data[$i][$startRow]));
		}
		if ($startRow + 1 <= $endRow - 1 && $element > 0)
		{
			// Recursive call
			$this->spiral($data, $startRow + 1,
                          $startCol + 1, 
                          $endRow - 1, $endCol - 1, $element);
		}
	}
	public static
	function main($args)
	{
		$task = new SpiralView();
		// Given matrix
		$matrix = array(
          array(1, 2, 3, 4, 5, 6), 
          array(22, 23, 24, 25, 26, 7), 
          array(21, 36, 37, 38, 27, 8), 
          array(20, 35, 42, 39, 28, 9), 
          array(19, 34, 41, 40, 29, 10), 
          array(18, 33, 32, 31, 30, 11), 
          array(17, 16, 15, 14, 13, 12)
        );
		$row = count($matrix);
		$col = count($matrix[0]);
		// Get the number of element
		$element = $row * $col;
		$task->spiral($matrix, 0, 0, 
                      $row - 1, $col - 1, $element);
	}
}
SpiralView::main(array());

Output

  1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36  37  38  39  40  41  42




Comment

Please share your knowledge to improve code and content standard. Also submit your doubts, and test case. We improve by your feedback. We will try to resolve your query as soon as possible.

New Comment