Ahora nos puedes seguir desde twitter, @objetivoPHP>.
Saludos y espero que incremente la participación en el sitio.
Ahora nos puedes seguir desde twitter, @objetivoPHP>.
Saludos y espero que incremente la participación en el sitio.
Espero que les sea de utilidad.
Paginador 3.0.0
Los estilos fueron obtenidos de los siguientes sitios.
Mis Algoritmos
TimerSys
Ejemplo obtener que solo se muestren los enlaces siguiente y anterior.
// Comenzamos con el paginador. require_once 'Paginador.php'; // Instanciamos la clase Paginador $paginador = new Paginador(); // Configuramos cuanto registros por pagina que debe ser igual a el limit de la consulta mysql $paginador->setCantidadRegistros(1); $paginador->setCantidadEnlaces(1); $paginador->setOmitir(array('primero', 'numero', 'actual', 'bloqueAnterior', 'bloqueSiguiente', 'ultimo')); $paginador->setTitulosVista('anterior', '<< Anterior '); $paginador->setTitulosVista('siguiente', ' Siguiente >>'); // Y mandamos a paginar desde la pagina actual y le pasamos tambien el total // de registros de la consulta mysql. $datos = $paginador->paginar($pagina, $totalRegistros);
Ahora el turno de la clase Paginador versionada.
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 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 | <?php /** * Clase Paginador. * Su responsabilidad es realizarnos el paginado de una consulta, es decir * proporcionar datos para realizar la barra de navegacion de la paginacion. * @package varias creado en el projecto opet * @copyright 2010 - ObjetivoPHP * @license Gratuito (Free) http://www.opensource.org/licenses/gpl-license.html * @author Marcelo Castro (ObjetivoPHP) * @link objetivophp@*******.**** * @version 2.1.0 (16/06/2008 - 09/04/2011) * @since Version 2.1.0 agregado funcionalidad para omitir enlaces, * idea de RAM. */ class Paginador { /** * Contiene los titulos que se mostraran en la barra de navegacion. O sea * primera, anteriror, .... , ultima, siguiente etc... * @var array */ private $_titulos = array('primero' => array('vista' => '| Primero ...', 'title' => 'Ir a la primera Pagina'), 'bloqueAnterior' => array('vista' => '<<', 'title' => 'Bloque Anterior'), 'anterior' => array('vista' => '<', 'title' => 'Pagina Anterior'), 'siguiente' => array('vista' => '>', 'title' => 'Pagina Siguiente'), 'bloqueSiguiente' => array('vista' => '>>', 'title' => 'Bloque Siguiente'), 'ultimo' => array('vista' => '... Ultimo |', 'title' => 'Ir a la Ultima Pagina'), 'numero' => array('vista' => null, 'title' => 'Ir a la pagina '), 'actual' => array('vista' => null, 'title' => 'Estas viendo esta pagina') ); /** * Contiene los marcadores que van antes y despues de la pagina actual, * para identificarla visualmente en la barra de navegacion del paginador. * @var array */ private $_marcador = array('antes' => '|', 'despues' => '|'); /** * Guarda el resultado de la paginacion por si es requrido mas tarde. * Formato array('vista' => 'primero', 'numero' => 0). * @var array */ private $_paginacion = array(); /** * Es la cantidad de registros, filas de la tabla que se mostraran por cada * pantalla. * @var integer */ private $_cantidadDeRegistrosPorPagina = 10; /** * Es la cantidad de Enlaces o vinculos que contendra el paginador, sin contar * los especiales como ser primero, ultimo etc.. * @var integer */ private $_cantidadDeEnlacesDelPaginador = 10; /** * Contiene la cantidad total de paginas del paginador. * @var integer */ private $_cantidadPaginas; private $_omitir = array(); /** * Metodo __construct. * Crea el objeto Paginador. * @param integer $crpp Cantidad de Registros a desplegarse en cada Pagina. * @param integer $cepp Cantidad de enlaces del paginador, sin especiales. * @return void */ public function __construct($crpp = 10, $cep = 10) { $this->_cantidadDeRegistrosPorPagina = ((int)$crpp > 0)? $crpp : 10; $this->_cantidadDeEnlacesDelPaginador = ((int)$cep > 0)? $cep : 10; } /** * Metodo setCantidadRegistros. * Configura la cantidad de registros que se desplegan en la pantalla. * @param integer $cantidad Cantidad de Registros por pagina. * @return void */ public function setCantidadRegistros($cantidad = 10) { $this->_cantidadDeRegistrosPorPagina = ((int)$cantidad > 0)? $cantidad : 10; } /** * Metodo setCantidadEnlaces. * Configura la cantidad de enlaces que contendra el paginador sin considerar los * enlaces especiales. * @param integer $cantidad Cantidad de Enlaces que se quieren mostrar. * @return void */ public function setCantidadEnlaces($cantidad = 10) { $this->_cantidadDeEnlacesDelPaginador = ((int)$cantidad > 0)? $cantidad : 10; } /** * Metodo paginar. * Realiza el paginado, generando todos los bloques. * @param integer $pagina Contiene desde que pagina se desplegara. * @param integer $cantidadDeResultados total de resutados de la consulta. * @return array */ public function paginar($pagina,$cantidadDeResultados) { $pagina = ((int)$pagina < 0)? 0 : $pagina; if ($cantidadDeResultados < 1) { // No hay resultados que paginar return false; } // Aqui significa que tenemos resultados y vamos a paginar // Preparo las variables que se utilizaran $paginaInicial = $paginaFinal = 0; $paginacion = array(); $totalPaginas = ceil($cantidadDeResultados / $this->_cantidadDeRegistrosPorPagina); if ($totalPaginas < 2) { // Si es menor a 2 es una pagina por lo tanto no pagino. $this->_cantidadPaginas = 1; return false; } if ($totalPaginas <= $this->_cantidadDeEnlacesDelPaginador) { $paginaInicial = 1; $paginaFinal = $totalPaginas; } else { $centroPaginador = floor($this->_cantidadDeEnlacesDelPaginador / 2); $paginaInicial = ($pagina+1) - $centroPaginador; $paginaFinal = $paginaInicial + $this->_cantidadDeEnlacesDelPaginador - 1; if ($paginaFinal > $totalPaginas) { $paginaFinal = $totalPaginas; $paginaInicial = $paginaFinal - ($this->_cantidadDeEnlacesDelPaginador -1); } if ($paginaInicial < 1) { $paginaInicial = 1; $paginaFinal = $this->_cantidadDeEnlacesDelPaginador; } } $ajuste = floor($this->_cantidadDeEnlacesDelPaginador / 2); $ajuste2 = 1 - ($this->_cantidadDeEnlacesDelPaginador % 2); $blockInicio = $paginaInicial - $this->_cantidadDeEnlacesDelPaginador + $ajuste - 1; $blockFinal = $paginaFinal + $this->_cantidadDeEnlacesDelPaginador - $ajuste + $ajuste2; $paginaInicial = $paginaInicial - 1; $paginaFinal = $paginaFinal - 1; if ($totalPaginas > 1 && !in_array('primero', $this->_omitir)) { if ($paginaInicial != 0) { $paginacion[] = array('numero' => 0, 'vista' => $this->_titulos['primero']['vista'], 'title' => $this->_titulos['primero']['title']); } } /* Configurar Block de Inicio */ if ($blockInicio > $ajuste && !in_array('bloqueAnterior', $this->_omitir)) { $paginacion[] = array('numero' => $blockInicio, 'vista' => $this->_titulos['bloqueAnterior']['vista'], 'title' => $this->_titulos['bloqueAnterior']['title']); } /* Configurar anterior */ if($pagina > 0 && !in_array('anterior', $this->_omitir)) { $paginacion[] = array('numero' => $pagina-1, 'vista' => $this->_titulos['anterior']['vista'], 'title' => $this->_titulos['anterior']['title']); } /* Inicio Block Central */ for ( $f = $paginaInicial; $f <= $paginaFinal; $f++) { if ($f != $pagina && !in_array('numero', $this->_omitir)) { $paginacion[]= array('numero' => $f, 'vista' => $f+1, 'title' => $this->_titulos['numero']['title'] . ($f+1)); } elseif (!in_array('actual', $this->_omitir)) { $paginacion[]= array('numero' => $f, 'vista' => $this->_marcador['antes'] . ($f+1) . $this->_marcador['despues'], 'title' => $this->_titulos['actual']['title']); } } /* Fin block Central */ /* Configurar siguiente */ if ($pagina < ($totalPaginas-1) && !in_array('siguiente', $this->_omitir)) { $paginacion[] = array('numero' => $pagina+1, 'vista' => $this->_titulos['siguiente']['vista'], 'title' => $this->_titulos['siguiente']['title']); } /* Fin block siguiente */ /* Configurar Block de Final */ if ($paginaFinal < ($totalPaginas - $this->_cantidadDeEnlacesDelPaginador - 1) && !in_array('bloqueSiguiente', $this->_omitir)) { $paginacion[] = array('numero' => $blockFinal-1, 'vista' => $this->_titulos['bloqueSiguiente']['vista'], 'title' => $this->_titulos['bloqueSiguiente']['title']); } /* Fin block Final */ if ( $paginaFinal != ($totalPaginas - 1) && !in_array('ultimo', $this->_omitir)) { $paginacion[] = array('numero' => $totalPaginas-1, 'vista' => $this->_titulos['ultimo']['vista'], 'title' => $this->_titulos['ultimo']['title']); } $this->_paginacion = $paginacion; $this->_cantidadPaginas = $totalPaginas; return $paginacion; } /** * Metodo setTitulosVista. * Configura los simbolos que se usaran para el enunciado de bloques, * primero, ultimo, anterior, siguiente etc... * @param string $titulo Titulo que se desea cambiar. primero, ultimo etc. * @param string $valor Valor que tendra la etiqueta. * @return void */ public function setTitulosVista($titulo, $valor) { if (array_key_exists($titulo, $this->_titulos)) { $this->_titulos[$titulo]['vista'] = $valor; } } /** * Metodo setTitulosTitle. * @param string $titulo Etiqueta a la que se desea cambiar la propiedad title. * @param string $valor Valor que tendra la etiqueta. * @return void */ public function setTitulosTitle($titulo, $valor) { if (array_key_exists($titulo, $this->_titulos)) { $this->_titulos[$titulo]['title'] = $valor; } } public function setOmitir($omitir = array()) { if (is_array($omitir)) { $this->_omitir = $omitir; } } /** * Metodo setMarcador. * @param string $antes Simbolo que va antes del enlace de pagina actual. * @param string $despues Simbolo que va despues del enlace de la pagina actual. * @return void */ public function setMarcador($antes, $despues) { $this->_marcador['antes'] = $antes; $this->_marcador['despues'] = $despues; } /** * Metodo getPaginacion. * Nos retorna el arreglo de paginacion. * @return array */ public function getPaginacion() { return $this->_paginacion; } /** * Metodo getCantidadPaginas. * Nos retorna la cantidad de paginas que tiene el paginador. * @return integer */ public function getCantidadPaginas() { return $this->_cantidadPaginas; } } |
| Cerro Peñarol |
River Plate Racing |
Liverpool Defensor SP. |
Danubio Wanderers |
Nacional Rampla Jrs |
| Rampla Jrs Peñarol |
Wanderers Nacional |
Defensor SP. Danubio |
Racing Liverpool |
Cerro River Plate |
| River Plate Peñarol |
Liverpool Cerro |
Danubio Racing |
Nacional Defensor SP. |
Rampla Jrs Wanderers |
| Wanderers Peñarol |
Defensor SP. Rampla Jrs |
Racing Nacional |
Cerro Danubio |
River Plate Liverpool |
| Liverpool Peñarol |
Danubio River Plate |
Nacional Cerro |
Rampla Jrs Racing |
Wanderers Defensor SP. |
| Defensor SP. Peñarol |
Racing Wanderers |
Cerro Rampla Jrs |
River Plate Nacional |
Liverpool Danubio |
| Danubio Peñarol |
Nacional Liverpool |
Rampla Jrs River Plate |
Wanderers Cerro |
Defensor SP. Racing |
| Racing Peñarol |
Cerro Defensor SP. |
River Plate Wanderers |
Liverpool Rampla Jrs |
Danubio Nacional |
| Nacional Peñarol |
Rampla Jrs Danubio |
Wanderers Liverpool |
Defensor SP. River Plate |
Racing Cerro |
Código de la Clase:
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 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 | <?php /** * Clase Fixture. * Genera una tabla de cruces para un torneo tipo Single Round Robin. o de * liguilla. * * @author Marcelo Castro * @package Fixture creado en el projecto opet * @copyright 2011 - ObjetivoPHP * @license Gratuito (Free) http://www.opensource.org/licenses/gpl-license.html * @author Marcelo Castro (ObjetivoPHP) * @link objetivophp@******.***** * @link http://objetivophp.com * @version 0.0.1 (19/02/2011 - 21/02/2011) */ class Fixture { /** * Cantidad de equipos participantes en el torneo. * @var integer */ private $_cantidadEquipos = 10; /** * Cantidad de equipos utilizados para armar el fixture. * Puede haber uno mas en caso de ser impar el numero de equipos. * @var integer */ private $_equiposFixture; /** * Cantidad de fechas que contendra el torneo. * @var integer */ private $_fechas; /** * Cantidad de partidos que se jugaran por fecha. * @var integer */ private $_partidosXFechas; /** * Guarda la matriz del fixture, incluye el equipo ficticio en caso de que * sea necesario. * @var array */ private $_fixture = array(); /** * Contiene los nombres de los equipos o en su defecto los numeros, que se * le otorgaron a cada uno. * @var array */ private $_equipos = array(); /** * Contiene si se seudo-aleatoriza la tabla de cruces o no. * @var boolean */ private $_aleatorio = true; /** * Contiene que debe de ponerse cuando un cuadro queda libre, caso * de cantidad de cuadros impares. * @var string */ private $_libre = 'libre'; /** * Metodo __construct. * @param mixed $equipos Cantidad de equipos o arreglo con los nombres. * @return void */ public function __construct($equipos = null) { if (is_array($equipos)) { $this->_cantidadEquipos = count($equipos); $this->_equipos = $equipos; } else { $this->_cantidadEquipos = is_int($equipos)? $equipos : 10; for ($f = 0; $f <= $this->_cantidadEquipos; $f++) { $this->_equipos[$f] = $f+1; } } $this->_partidosXFechas = ceil($this->_cantidadEquipos /2 ); $this->_equiposFixture = $this->_cantidadEquipos + $this->_cantidadEquipos % 2; $this->_fechas = $this->_partidosXFechas * 2 - 1 ; } /** * Configura si se aleatoriza la tabla de cruces. * @param boolean $aleatorio * @return void */ public function setAleatorio($aleatorio = true) { $this->_aleatorio = ($aleatorio)? true : false; } /** * Asigna el comentario para fecha libre. * @param string $cometario * @return void */ public function setFechaLibre($comentario) { $this->_libre = $comentario; } /** * Metodo tablaDeCruces. * Genera una matriz con los cruces correspondientes entre los equipos. * @return void */ public function tablaDeCruces() { $fixture = array(); if ($this->_aleatorio) { shuffle($this->_equipos); } if ($this->_cantidadEquipos % 2) { $this->_equipos[$this->_equiposFixture-1] = $this->_libre; } // Lleno el indice A de cada elemento con numeros del numero 1 // hasta llegar al maximo de fechas y vuelvo a comenzar en 1. // El ultimo numero puesto debe ser el maximo de fechas.- $datos = $this->_partidosXFechas * $this->_fechas; for ($f = 1; $f <= $datos; $f++) { $col = $f % $this->_partidosXFechas; $col = ($col != 0)? $col : $this->_partidosXFechas; $fila = ceil ($f / $this->_partidosXFechas); $auxiliar = $f % $this->_fechas; if ($auxiliar == 0) { $auxiliar = (int) $this->_fechas; } $fixture[$fila][$col]['A'] = $this->_equipos[$auxiliar-1]; } // Lleno el primer elemento de cada fila con el ultimo equipo // o el equipo ficticio, si la cantidad de equipo es impar. for ($f = 1; $f<= $this->_fechas; $f++) { $fixture[$f][1]['B'] = $this->_equipos[$this->_equiposFixture-1]; } // Lleno el indice B de cada elemento empezando del maximo de fechas // hasta 1 y vuelvo a empezar salteo la primer columna que ya fue completada // en el ciclo anterior $indice = $this->_fechas; for ($f = 1; $f <= $this->_fechas; $f++) { for ($c = 2; $c <= $this->_partidosXFechas; $c++) { $fixture[$f][$c]['B'] = $this->_equipos[$indice - 1]; if (--$indice == 0) { $indice = $this->_fechas; } } } $this->_fixture = $fixture; } /** * Retorna el arreglo de todos los cruces. * @return array */ public function getCruces() { return $this->_fixture; } /** * Metodo verCuadro. * Muestra la tabla de cruces en una tabla HTML, es solo a efectos demostrativos * @return HTML */ public function verCuadro() { echo "<table border=1>\n"; for ($f = 1; $f <= $this->_fechas; $f++) { echo "<tr>\n"; for ($c = 1; $c <= $this->_partidosXFechas; $c++) { echo "<td>"; echo utf8_decode($this->_fixture[$f][$c]['A']); echo '</br>' . utf8_decode($this->_fixture[$f][$c]['B']); echo "</td>\n"; } echo "</tr>\n"; } echo "</table>"; } } |
Método de Uso:
Como siempre por tratarse de una clase lo primero que debemos hacer es instanciarla,
$objFix = new Fixture($equipos);
// Primera forma pasamos un entero. $equipos = 10; // Segunda forma pasamos un arreglo con los datos $equipos = array('Peñarol', 'Nacional', 'Liverpool', 'River Plate', 'Defensor SP.', 'Rampla Jrs', 'Wanderers', 'Cerro', 'Racing', 'Danubio'); // La definicion de la variable $equipos debe ser realizada antes de la instancia.
Configuraciones:
$objFix->setAleatorio(true); // No es necesario para true pero es a modo de ejemplo.
setFechaLibre recibe un string (cadena de caracteres), que representa el comentario que se pondrá cuando un equipo tenga fecha libre.
$objFix->setFechaLibre('Libre');
Eso es lo único que podemos configurar.
Luego de realizar o no dicha configuración ejecutamos el método que genera la matriz de cruces.
$objFix->tablaDeCruces();
Por ultimo tenemos el método de captura de los resultados, para ello contamos con getCruces(), que nos retornara el arreglo o matriz con los emparejamientos de cuadros.
$cruces = $objFix->getCruces();
Por ultimo mencionare el método tablaDeCruces() que en realidad esta puesto solo para ver en formato HTML la tabla de cruces, pero no debería formar parte de la clase.
Espero a alguien le sea de utilidad.
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 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 | <?php /** * Clase Aleatorio. * Genera un numero aleatorio entre dos numeros dados. * * @package matematica creado en el projecto ipusa * @copyright 2010 - ObjetivoPHP * @license Gratuito (Free) http://www.opensource.org/licenses/gpl-license.html * @author Marcelo Castro (ObjetivoPHP) * @link objetivophp@*****.*** * @version 1.0.0 (17/09/2010 - 17/09/2010) */ class Aleatorio { /** * Es el extremo inferior del entorno de los numero aleatorios. * @var float */ private $_extremoInferior = 0; /** * Es el extremo superior del entorno superior de los numeros aleatorios. * @var float */ private $_extremoSuperior = 1; /** * Cantidad de decimales, 0 para entero, max 10. * @var integer */ private $_decimales = 0; /** * Cantidad de numeros aleatorios a Generar. * @var integer */ private $_cantidad = 1; /** * Configura si seran aleatorios unicos false, o true para que se puedan repetir. * @var boolean */ private $_permitirRepetidos = true; /** * Guarda los numeros aleatorios generados. * @var array */ private $_aleatorios = array(); /** * Metodo __construct. * @param double $extInferior Numero minimo que se puede generar. * @param double $extSuperior Numero maximo que se puede generar. * @return void */ public function __construct($extInferior, $extSuperior) { if ($extSuperior > $extInferior) { $this->_extremoInferior = $extInferior; $this->_extremoSuperior = $extSuperior; } } /** * Metodo setDecimales. * Configura cuantos decimales despues de la coma deber tener el numero * aleatorio generado. * @param integer $decimales cantidad de decimales despues de la coma. * @return void */ public function setDecimales($decimales) { if ($decimales >=0 && $decimales <=10) { $this->_decimales = (int) $decimales; } } /** * Metodo setCantidad. * Configura la cantidad de numeros aleatorios que deberan generarse. * @param integer $cantidad Cantidad de numeros a generarse. * @return void */ public function setCantidad($cantidad) { $this->_cantidad = ($cantidad > 0)? (int) $cantidad : 1; } /** * Metodo setPermitirRepetidos. * Configuramos si se pueden repetir numeros o no. * @param boolean $repetir true se pueden repetir los numeros * false no se puede repetir * @return void */ public function setPermitirRepetidos($repetir = true) { $this->_permitirRepetidos = ($repetir)? true : false; } /** * Metodo generar. * Genera los numeros aleatorios. * @return array */ public function generar() { if (!$this->_controlarBucle()) { trigger_error('No se permite generar mas del 75% de los numeros unicos.', E_USER_ERROR); return; } mt_srand(); $maxAleatorio = mt_getrandmax(); $amplitud = $this->_extremoSuperior - $this->_extremoInferior; for ($i = 0; $i < $this->_cantidad; $i++) { do { $aleatorio = mt_rand() / $maxAleatorio; $numero = ($amplitud * $aleatorio) + $this->_extremoInferior; $numero = number_format($numero, $this->_decimales); } while (!$this->_permitirRepetidos && in_array($numero, $this->_aleatorios)); $this->_aleatorios[$i] = $numero; } return $this->_aleatorios; } /** * Metodo getAleatorios. * Retorna los numeros aleatorios que fueron generados. * @param integer $orden 1 = Ascendente, 2 = descendente, otro sin ordenar. * @return array */ public function getAleatorios($orden = null) { $numeros = $this->_aleatorios; switch ($orden) { case 1: sort($numeros); break; case 2: rsort($numeros); break; default: } return $numeros; } /** * Metodo _controlarBucle. * Ofrece seguridad de no caer en un bucle infinito. * @return boolean */ private function _controlarBucle() { $posible = true; if ($this->_permitirRepetidos === false) { $intervalo = 1 / pow(10, $this->_decimales); $amplitud = $this->_extremoSuperior - $this->_extremoInferior + $intervalo; $maxCantidad = $amplitud / $intervalo; if (($maxCantidad * 0.75) <= $this->_cantidad) { $posible = false; } } return $posible; } } |
Ejemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | // Instanciamos la clase y le decimos que genere en el entorno 15,99 $obj = new Aleatorio(15, 99); //Podemos Congiguramos la cantidad de numeros que queremos si no ponemos nada es 1. $obj->setCantidad(5); // Cantidad de números después de la coma, 0 (cero) para enteros. $obj->setDecimales(0); // Configuramos si queremos que se repitan o no los numeros aleatorios. $obj->setPermitirRepetidos(false); // Generamos los numeros una vez seleccionadas las opciones que queremos. // generar retorna un arreglo pero si no lo capturamos lo podremos hacer luego // con getAleatorios $obj->generar(); // Capturamos los numeros generados. // 1> ascendente - 2> Descendente - nullo como salieron $numeros = $obj->getAleatorios(1); // Imprimimos los resultados var_dump($numeros); |
Bueno espero que a alguna persona le sea de utilidad.
Macarena Amezqueta, nos envió una ampliación de la rutina para procesar imágenes en el servidor por lotes.
Transcribo el correo-e enviado:
Mi problema es que tengo 60 GB de imágenes en un servidor que tengo que migrar y es un poco complicado. Encontré tu librería para modificar imágenes y me parecio excelente.
Lo que hice fue modificar el script para que lea directamente desde un directorio y le cambie solamente la calidad a las fotos, para luego guardarlas en una nueva carpeta dejando la foto original donde esta
Solamente hay que correr el archivo procesarImagen.php
Inicialmente hice unas pruebas localmente a traves del explorador, y luego subi toda la carpeta a un servidor linux.
Para correr el script solamente puse lo siguiente
/usr/local/php5/php /home/macarena/procesarImagen.php
el usr/local/php5 o lo que sea es el directorio donde estan los binarios de php.
Para ubuntu solamente tenes que poner
php /home/macarena/procesarImagen.php
El scritp me dio muy buenos resultados, con un lote de prueba de 1000 imagenes de 90MB bajo su peso a 21MB solamente modificando la calidad
Besos y gracias!!!!