Comunidad PHPeros
Lenguajes => PHP => (POO) Programación Orientada a Objetos => Mensaje iniciado por: Warlox en 09 de Abril de 2011, 22:20:58 pm
-
¡Hola!
El día de hoy me puse a crear una clase que podría serme útil en algún momento, esta sirve para trabajar con arreglos (arrays). Por ahora lo único que se me ha ocurrido es hacer funciones para volver al revés el array, mezclarlo aleatoriamente, correrlo e imprimirlo (algo como print_r pero más personalizado :P).
Es una clase algo sencilla y tonta, pero sin duda fue una buena manera (para mi) de pasar el tiempo libre sin aburrirme xD
Acá está la clase:
<?php
class arreglo
{
private $arreglo;
private $cuenta;
/* Construyo la función principal para pasar los parámetros del array */
function __construct($xArray)
{
$this->arreglo = $xArray;
$this->cuenta = (is_array($xArray)) ? count($xArray) : strlen($xArray);
}
/* Imprimir un array */
function mostrar()
{
if(!is_array($this->arreglo))
{
echo $this->arreglo;
}
else
{
echo 'Array<br />(<br />';
foreach($this->arreglo as $indice => $valor)
{
echo ' ['.$indice.'] => '.$valor.'<br />';
}
echo ')<br>';
}
}
/* Mover un array */
function correr($x)
{
if(!is_array($this->arreglo))
{
$this->toArray();
$this->correr($x);
$this->toString();
}
else
{
for($i = 0; $i < $x; $i++)
{
$v = $this->arreglo[($this->cuenta - 1)];
array_unshift($this->arreglo, $v);
array_pop($this->arreglo);
}
}
}
/* Darle vuelta al array */
function volver()
{
$tmp = $this->arreglo;
for($i = 0; $i < $this->cuenta; $i++)
{
$this->arreglo[$i] = $tmp[($this->cuenta - 1) - $i];
}
}
/* Barajar el array */
function barajar()
{
$usados = array();
$tmp = $this->arreglo;
for($i = 0; $i < $this->cuenta; $i++)
{
while(1)
{
$x = mt_rand(0, $this->cuenta - 1);
if(!in_array($x, $usados))
{
$usados[] = $x;
$this->arreglo[$i] = $tmp[$x];
break;
}
}
}
}
/* Convertir el array en string */
function toString()
{
if(!is_array($this->arreglo))
{
die('Solo se puede convertir un array en un string.');
}
else
{
$tmp = $this->arreglo;
$this->arreglo = '';
for($i = 0; $i < $this->cuenta; $i++)
{
$this->arreglo .= $tmp[$i];
}
}
}
/* Convertir el string en array */
function toArray()
{
if(!is_array($this->arreglo))
{
$tmp = $this->arreglo;
unset($this->arreglo);
for($i = 0; $i < strlen($tmp); $i++)
{
$this->arreglo[] = $tmp[$i];
}
$this->cuenta = count($this->arreglo);
}
else
{
die('Solo se puede convertir un string en un array.');
}
}
}
?>
Y ahí pueden ir jugando y experimentando con sus funciones jeje, espero que les guste. Cualquier arreglo o recomendación me la dicen por este mismo post :D
Saludos ^^
-
Tu y tu aburrimiento.. xD
De algo me servirá, no se de que pero me servirá...
-
Gracias!, claro que puede servir, como por ejemplo para un juego de naipes o de lotería, claramente puede servir para revolver las cartas o cualquier cosa que se te ocurra :P
-
Actualizo:
Agregué dos nuevas funciones a la clase: toString() y toArray(), las cuales sirven para convertir el arreglo en una cadena o viceversa.
-
La estructura orientada a objetos, las validaciones y tal me gustaron, pero lo único que no me gustó fueron las impresiones y los die() forzados dentro de las clases XDD...
Sobre las impresiones supongo que es porque querías hacer algo como el print_r según comentaste, así que bueno no pasa nada, y lo del die() sería mejor arrojar excepciones o algo por el estilo x)
-
Me siento jodedor de códigos ._. Pero...
volver() sería array_reverse()
barajar() sería shuffle()
toString() podría resumirse en implode('', $array);
toArray() podría resumirse en explode('', $array); // de este no estoy tan seguro...
además, lo primero que usas para convertir cada caracter a un parametro podría simplificarse con str_split($cadena)
-
Demonios West xD. Lo que pasa es que estaba sin internet y me aburría demasiado jeje, así que me puse a crear las funciones por mí mismo, así las entiendo mejor y tal xD.
---------
Actualizo:
Ahora se pueden hacer todas las funciones de la clase también con strings :D
-
Demonios West xD. Lo que pasa es que estaba sin internet y me aburría demasiado jeje, así que me puse a crear las funciones por mí mismo, así las entiendo mejor y tal xD.
---------
Actualizo:
Ahora se pueden hacer todas las funciones de la clase también con strings :D
No, si como trabajo de crear las funciones es extraordinario, yo habría estado una burrada de tiempo para eso xD, pero a efectos practicos, es mejor usar las predefinidas xD