<?php 
class AppResultado{
	protected $_datos = array();
	protected $_class;
	
	public function getDatos(){
		return $this->_datos;
		$salida = array();
		foreach ($datos as $fila){
			$salida[] = $this->preparaDatosFila($fila);
		}
		return $salida;
		
	}
	
	
	public function estaVacio(){
		if (is_array($this->_datos) && count($this->_datos)>0)
			return false;
		else 
			return true;
	}
	
	public function setDatos($datos){
		$this->_datos = $datos;
	}
	
	public function addFilaDatos($fila){
		$this->_datos[] = $fila;
	}
	
	
	public function setClass($clase){
		$this->_class = $clase;
	}
	public function getClass(){
		return $this->_class;
	}
	
	public function getRegistroToArray($indice = 0){
		if ( (is_int($indice)) && (isset($this->_datos[$indice]) ) )
		return $this->_datos[$indice];
		else 
		return array();
	}
	/**
	 * Nos devulve todos los datos que contiene en modo array
	 * @return multitype:array:NULL AppResultado
	 */
	public function toArray(){
		$datos = array();
		
		foreach ($this->_datos as $fila){
			$nueva_fila = array();
			
			foreach($fila as $key => $value){
				if($value instanceof AppResultado){
					$nueva_fila[$key]= $value->toArray();
				}else{
					$nueva_fila[$key]= $value;
				}
			}
			$datos[] = $nueva_fila;
			
		}
		return $datos;
	}
	
	
	/**
	 * 
	 * @param string $clase Clase con la que queremos que se creen los objetos
	 * @return multitype: array
	 */
	
	public function toObjeto($clase = null){
		if($clase == null){
			$clase = $this->_class;
		}
		if($clase == null){
			echo 'no se ha definido la clase para el AppObjeto';
			die();
		}
		$clases = array();
		
		return $clases;
	}
	
	/**
	 * 
	 * @param string $nombre_nuevo_campo Nombre del nuevo campo que se va ha crear
	 * @param AppResultado $appResultado_insertado AppResultado que sera insertado en en nuevo campo
	 * @param string $nombre_campo_local Nombre del campo local por el que va ha ser filtrado
	 * @param string $nombre_campo_insertado nombre del campo listado insertado con el que sera comprado el nombre del campo local
	 */
	public function mergeListadosResultados($nombre_nuevo_campo, AppResultado $appResultado_insertado, $nombre_campo_local, $nombre_campo_insertado){
		
		$listado_externo = $appResultado_insertado->getDatos();
		foreach ($this->_datos as &$fila_actual){
			if(isset($fila_actual[$nombre_nuevo_campo])){
				echo 'El Campo '.$nombre_nuevo_campo.' en el appResultado ya existia antes del merge';
				die();
			}
			$nuevo_app_resultado = new AppResultado();
			$nuevo_app_resultado->setClass($appResultado_insertado->getClass());
			foreach ($listado_externo as $fila_externa){
				if($fila_actual[$nombre_campo_local] == $fila_externa[$nombre_campo_insertado]){
					$nuevo_app_resultado->addFilaDatos($fila_actual);
				}
			}
			
			$fila_actual[$nombre_nuevo_campo] = $nuevo_app_resultado;
			
		}
		unset($fila_actual);
		
	}
	
	private function preparaDatosFila($fila){
	/*	$fila_tratada = array();
		foreach ($fila as $key => $value){
	
			$formatoFecha= 'd/m/Y H:i:s';
			$valor = $value;
			if(strlen($valor)>19)
				$valor = substr($valor,0, 19);
			if (preg_match ( '#([0-9]{4})-([0-9]{2})-([0-9]{2}) ([0-9]{2}):([0-9]{2}):([0-9]{2})#', $valor )) {
				$fecha = DateTime::createFromFormat ( 'Y-m-d H:i:s', $valor );
				$value = $fecha->format ( $formatoFecha);
			}elseif($valor =='0000-00-00 00:00:00'){
				$value = '';
			}else{
	
				if(strlen($valor)>10)
					$valor = substr($valor,0, 10);
				$formatoFecha= 'd/m/Y';
				if (preg_match ( '#([0-9]{4})-([0-9]{2})-([0-9]{2})#', $valor )) {
					$fecha = DateTime::createFromFormat ( 'Y-m-d', trim ( $valor ) );
					$value = $fecha->format ( $formatoFecha);
				}elseif($valor == '0000-00-00'){
					$value = '';
				}else{
	
				}
			}
	
			$fila_tratada[$key] = $value;
		}
	
	
	
		return $fila_tratada;
		*/
		return $fila;
	}
	
	
}