| 
<?
/*
 Copyright: 2009 кот, админ, шредер.
 Author: Я ацкий одмин, йа счас в серверной кота через шредер за 25 секнд пропустил o_0
 */
 
 class Table
 {
 private $table;
 private $th;
 private $tr;
 
 function __construct ($data, $type = null)
 {
 switch ($type)
 {
 case 'json-file':
 if(file_exists ($data))
 {
 $data = json_decode (file_get_contents ($data), true);
 }
 else
 {
 throw new Exception ('File $data not found');
 }
 break;
 case 'json':
 $data = json_decode ($data, true);
 break;
 
 case 'xml-file':
 if(file_exists ($data))
 {
 $xml = new XmlToArray (file_get_contents ('data.xml'));
 $data = $xml->start ();
 }
 else
 {
 throw new Exception ('File $data not found');
 }
 break;
 
 case 'xml':
 $xml = new XmlToArray ($data);
 $data = $xml->start ();
 break;
 
 default:
 if (!(is_array ($data) && count ($data['tr']) > 0))
 {
 throw new Exception ('Invalid array');
 }
 }
 $this->parse_input ($data);
 $this->compile ();
 }
 
 private function parse_input ($data)
 {
 $this->table = $this->parse_parameters ($data ['table']);
 $this->th = $data ['th'];
 $this->tr = $data ['tr'];
 }
 
 private function parse_parameters ($data)
 {
 if (is_array ($data))
 {
 foreach ($data as $key=>$value)
 {
 $str .= ' '.trim ($key).'="'.trim ($value).'"';
 }
 return $str;
 }
 else
 {
 return $data;
 }
 }
 
 private function padding ($n = 1)
 {
 return str_repeat ('    ', $n);
 }
 
 private function compile ()
 {
 echo '<table'.$this->table.'>';
 if (is_array ($this->th) && count ($this->th) > 0)
 {
 echo $this->padding ()."<thead>\n";
 foreach ($this->th as $value)
 {
 echo $this->padding (2)."<th>$value</th>\n";
 }
 echo $this->padding ()."</thead>\n";
 }
 echo $this->padding ()."<tbody>\n";
 foreach ($this->tr as $value)
 {
 echo $this->padding (2)."<tr>\n";
 foreach ($value as $val)
 {
 echo $this->padding (3)."<td>$val</td>\n";
 }
 echo $this->padding (2)."</tr>\n";
 }
 echo $this->padding ()."</tbody>\n</table>";
 }
 }
 
 /**
 * Author   : MA Razzaque Rupom ([email protected], [email protected])
 * Version  : 1.0
 * Modification: Ewg
 * Date     : 02 March, 2006
 * Purpose  : Creating Hierarchical Array from XML Data
 * Released : Under GPL
 */
 
 class XmlToArray
 {
 var $xml='';
 private $temp;
 
 function __construct ($xml)
 {
 $this->xml = $xml;
 $this->temp = $this->createArray ();
 }
 
 public function start ()
 {
 foreach ($this->temp['data']['tr']['0'] as $value)
 {
 $tr[] = $value['0'];
 }
 $data = array ('table'=>$this->temp['data']['table']['0'], 'th'=>$this->temp['data']['th']['0'], 'tr'=>$tr);
 return $data;
 }
 /**
 * _struct_to_array($values, &$i)
 *
 * This is adds the contents of the return xml into the array for easier processing.
 * Recursive, Static
 *
 * @access    private
 * @param    array  $values this is the xml data in an array
 * @param    int    $i  this is the current location in the array
 * @return    Array
 */
 
 function _struct_to_array($values, &$i)
 {
 $child = array();
 if (isset($values[$i]['value'])) array_push($child, $values[$i]['value']);
 
 while ($i++ < count($values)) {
 switch ($values[$i]['type']) {
 case 'cdata':
 array_push($child, $values[$i]['value']);
 break;
 
 case 'complete':
 $name = $values[$i]['tag'];
 if(!empty($name)){
 $child[$name]= ($values[$i]['value'])?($values[$i]['value']):'';
 if(isset($values[$i]['attributes'])) {
 $child[$name] = $values[$i]['attributes'];
 }
 }
 break;
 
 case 'open':
 $name = $values[$i]['tag'];
 $size = isset($child[$name]) ? sizeof($child[$name]) : 0;
 $child[$name][$size] = $this->_struct_to_array($values, $i);
 break;
 
 case 'close':
 return $child;
 break;
 }
 }
 return $child;
 }//_struct_to_array
 
 /**
 * createArray($data)
 *
 * This is adds the contents of the return xml into the array for easier processing.
 *
 * @access    public
 * @param    string    $data this is the string of the xml data
 * @return    Array
 */
 function createArray()
 {
 $xml    = $this->xml;
 $values = array();
 $index  = array();
 $array  = array();
 $parser = xml_parser_create();
 xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
 xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
 xml_parse_into_struct($parser, $xml, $values, $index);
 xml_parser_free($parser);
 $i = 0;
 $name = $values[$i]['tag'];
 $array[$name] = isset($values[$i]['attributes']) ? $values[$i]['attributes'] : '';
 $array[$name] = $this->_struct_to_array($values, $i);
 return $array;
 }//createArray
 
 
 }//XmlToArray
 |