Tony Landis home

PHP Array to Text Tables

I needed this for a little project so I coded it up. I haven’t done a lot of tests but it works just fine for formatting the associative arrays I have run through it.

The class supports multi-line rows, limiting the width of the column, and automatically creating a heading based on the keys from the associative array.

Usage and Output Example

              
<?php

              


              
$data = array(

              
array('company'=>'AIG', 'id'=>1, 'balance'=> '-$99,999,999,999.00'),

              
array('company'=>'Wachovia', 'id'=>2, 'balance'=> '-$10,000,000.00'),

              
array('company'=>'HP', 'id'=>3, 'balance'=> '$555,000.000.00'),

              
array('company'=>'IBM', 'id'=>4, 'balance'=> '$12,000.00')

              
);

              


              
$renderer = new ArrayToTextTable($data);

              
$renderer->showHeaders(true);

              
$renderer->render();

              


              
?>

            
brought to you by .
Text Table Formatted Output of above example:
+----------+----+---------------------+
| COMPANY  | ID |       BALANCE       |
+----------+----+---------------------+
| AIG      | 1  | -$99,999,999,999.00 |
| Wachovia | 2  | -$10,000,000.00     |
| HP       | 3  | $555,000.000.00     |
| IBM      | 4  | $12,000.00          |
+----------+----+---------------------+

Here is the class:


              
<?php

              
/**

              
* Array to Text Table Generation Class

              
*

              
* @author Tony Landis <[email protected]>

              
* @link http://www.tonylandis.com/

              
* @copyright Copyright (C) 2006-2009 Tony Landis

              
* @license http://www.opensource.org/licenses/bsd-license.php

              
*/

              
class ArrayToTextTable

              
{

              
    /**

              
* @var array The array for processing

              
*/

              
    private $rows;

              


              
    /**

              
* @var int The column width settings

              
*/

              
    private $cs = array();

              


              
    /**

              
* @var int The Row lines settings

              
*/

              
    private $rs = array();

              


              
    /**

              
* @var int The Column index of keys

              
*/

              
    private $keys = array();

              


              
    /**

              
* @var int Max Column Height (returns)

              
*/

              
    private $mH = 2;

              


              
    /**

              
* @var int Max Row Width (chars)

              
*/

              
    private $mW = 30;

              


              
    private $head = false;

              
    private $pcen = "+";

              
    private $prow = "-";

              
    private $pcol = "|";

              
    

              
    

              
    /** Prepare array into textual format

              
*

              
* @param array $rows The input array

              
* @param bool $head Show heading

              
* @param int $maxWidth Max Column Height (returns)

              
* @param int $maxHeight Max Row Width (chars)

              
*/

              
    public function ArrayToTextTable($rows)

              
    {

              
        $this->rows =& $rows;

              
        $this->cs=array();

              
        $this->rs=array();

              
 

              
        if(!$xc = count($this->rows)) return false;

              
        $this->keys = array_keys($this->rows[0]);

              
        $columns = count($this->keys);

              
        

              
        for($x=0; $x<$xc; $x++)

              
            for($y=0; $y<$columns; $y++)

              
                $this->setMax($x, $y, $this->rows[$x][$this->keys[$y]]);

              
    }

              
    

              
    /**

              
* Show the headers using the key values of the array for the titles

              
*

              
* @param bool $bool

              
*/

              
    public function showHeaders($bool)

              
    {

              
       if($bool) $this->setHeading();

              
    }

              
    

              
    /**

              
* Set the maximum width (number of characters) per column before truncating

              
*

              
* @param int $maxWidth

              
*/

              
    public function setMaxWidth($maxWidth)

              
    {

              
        $this->mW = (int) $maxWidth;

              
    }

              
    

              
    /**

              
* Set the maximum height (number of lines) per row before truncating

              
*

              
* @param int $maxHeight

              
*/

              
    public function setMaxHeight($maxHeight)

              
    {

              
        $this->mH = (int) $maxHeight;

              
    }

              
    

              
    /**

              
* Prints the data to a text table

              
*

              
* @param bool $return Set to 'true' to return text rather than printing

              
* @return mixed

              
*/

              
    public function render($return=false)

              
    {

              
        if($return) ob_start(null, 0, true);

              
  

              
        $this->printLine();

              
        $this->printHeading();

              
        

              
        $rc = count($this->rows);

              
        for($i=0; $i<$rc; $i++) $this->printRow($i);

              
        

              
        $this->printLine(false);

              


              
        if($return) {

              
            $contents = ob_get_contents();

              
            ob_end_clean();

              
            return $contents;

              
        }

              
    }

              


              
    private function setHeading()

              
    {

              
        $data = array();

              
        foreach($this->keys as $colKey => $value)

              
        {

              
            $this->setMax(false, $colKey, $value);

              
            $data[$colKey] = strtoupper($value);

              
        }

              
        if(!is_array($data)) return false;

              
        $this->head = $data;

              
    }

              


              
    private function printLine($nl=true)

              
    {

              
        print $this->pcen;

              
        foreach($this->cs as $key => $val)

              
            print $this->prow .

              
                str_pad('', $val, $this->prow, STR_PAD_RIGHT) .

              
                $this->prow .

              
                $this->pcen;

              
        if($nl) print "\n";

              
    }

              


              
    private function printHeading()

              
    {

              
        if(!is_array($this->head)) return false;

              


              
        print $this->pcol;

              
        foreach($this->cs as $key => $val)

              
            print ' '.

              
                str_pad($this->head[$key], $val, ' ', STR_PAD_BOTH) .

              
                ' ' .

              
                $this->pcol;

              


              
        print "\n";

              
        $this->printLine();

              
    }

              


              
    private function printRow($rowKey)

              
    {

              
        // loop through each line

              
        for($line=1; $line <= $this->rs[$rowKey]; $line++)

              
        {

              
            print $this->pcol;

              
            for($colKey=0; $colKey < count($this->keys); $colKey++)

              
            {

              
                print " ";

              
                print str_pad(substr($this->rows[$rowKey][$this->keys[$colKey]], ($this->mW * ($line-1)), $this->mW), $this->cs[$colKey], ' ', STR_PAD_RIGHT);

              
                print " " . $this->pcol;

              
            }

              
            print "\n";

              
        }

              
    }

              


              
    private function setMax($rowKey, $colKey, &$colVal)

              
    {

              
        $w = mb_strlen($colVal);

              
        $h = 1;

              
        if($w > $this->mW)

              
        {

              
            $h = ceil($w % $this->mW);

              
            if($h > $this->mH) $h=$this->mH;

              
            $w = $this->mW;

              
        }

              
 

              
        if(!isset($this->cs[$colKey]) || $this->cs[$colKey] < $w)

              
            $this->cs[$colKey] = $w;

              


              
        if($rowKey !== false && (!isset($this->rs[$rowKey]) || $this->rs[$rowKey] < $h))

              
            $this->rs[$rowKey] = $h;

              
    }

              
}

              
?>

            
brought to you by .
купить диплом техникума купить аттестат за 11 класс купить диплом техникума купить диплом университета купить диплом http://diplomy-originaly.com купить диплом фармацевта где купить диплом купить диплом нового образца купить диплом колледжа купить диплом о среднем образовании http://diplomsagroups.com купить диплом фармацевта купить диплом фармацевта https://gosznac-diploma.com/ купить диплом специалиста купить диплом фармацевта купить диплом с регистрацией купить диплом с занесением в реестр купить диплом в москве где купить диплом купить диплом техникума с занесением в реестр купить диплом о высшем образовании https://russian-diplom.com купить диплом с занесением в реестр реально купить диплом специалиста http://rudiplomirovanie.com купить диплом с занесен ем в реестр купить диплом института http://aurus-diploms.com купить диплом с реестром цена купить аттестат за 11 класс https://premiums-diploms.com купить диплом с занесением в реестр реально купить диплом автомеханика http://russdiplomiki.com купить диплом с реестром купить диплом автомеханика https://diplomansy.com купить диплом без реестра купить диплом о среднем образовании https://diploms-asx.com купить диплом с занесением в реестр цена купить диплом в москве https://diploms-asx.com купить диплом с занесением в реестр купить диплом фармацевта https://eonline-diploms.com купить настоящий диплом реестр купить диплом института купить диплом института купить диплом с реестром купить дипломы о высшем http://diplomrussian.com купить диплом с проводкой купить диплом университета купить диплом института купить диплом с занесением в реестр купить диплом о среднем специальном купить диплом в москве купить диплом техникума с занесением в реестр купить диплом института https://russiany-diploman.com/ купить диплом с занесением в реестр цена купить диплом кандидата наук купить диплом университета купить диплом техникума с занесением в реестр купить диплом врача https://rudiplomisty24.com/ купить диплом с реестром цена москва купить диплом фармацевта https://land-diplom.com/ купить диплом пту с занесением в реестр купить свидетельство о браке купить аттестат купить диплом с занесением в реестр купить аттестат за 11 класс https://diplomsy-landsy24.ru/ купить диплом высшем образовании занесением реестр купить диплом врача купить аттестат за 9 класс куплю диплом техникума реестр купить диплом института купить диплом о высшем образовании купить диплом с реестром цена купить диплом фармацевта купить диплом фармацевта купить медицинский диплом с занесением в реестр купить диплом о высшем образовании купить свидетельство о браке купить диплом с реестром цена купить диплом о высшем образовании http://aurus-diploms.com/kupit-diplom-farmacevta.html купить диплом с занесен ем в реестр купить диплом о среднем специальном купить диплом вуза с реестром купить диплом колледжа с занесением в реестр купить диплом автомеханика http://diploms-service.com/diplomy-po-gorodam/ufa купить диплом с реестром купить диплом о среднем образовании https://diploms-asx.com/ купить диплом техникума с занесением в реестр купить аттестат за 9 классhttps://russdiplomiki.com/kupit-diplom-v-ekaterinburge.html купить диплом врача с занесением в реестр купить диплом кандидата наук купить диплом училища где купить диплом с реестром купить свидетельство о браке купить диплом специалиста купить диплом с занесен ем в реестр купить диплом о высшем образовании https://ukrdiplom.com куплю диплом техникума реестр купить диплом врача купить диплом для иностранцев купить диплом с реестром цена москва купить аттестат за 11 классаттестат купить купить диплом медсестры с занесением в реестр купить диплом ссср https://diploms-goznak.com купить диплом с занесением в реестр цена
купить диплом техникума
https://aurus-diplomany.com
купить диплом магистра
купить аттестат за 11 класс
https://russiany-diplomana.com
купить диплом ссср
купить диплом о высшем образовании
купить диплом фармацевта
купить диплом о среднем специальном
купить диплом техникума
https://premialnie-diplomas.com
купить диплом магистра
купить свидетельство о рождении
купить диплом бакалавра
купить диплом кандидата наук