function ajedrez($i, $j) { if (($i + $j) % 2 == 0) { return 'class="par"'; } return ''; } function tablero($tam = 8) { ?> <table border="1"> <?php for ($j = 0; $j < $tam; $j++) { ?> <tr> <?php for ($i = 0; $i < $tam; $i++) { ?> <td <?= ajedrez($i, $j) ?> ></td> <?php } ?> </tr> <?php } ?> </table> <?php } function creaTD($num, $cont) { $res = ""; for ($i = 0; $i < $num; $i++) { $res.="<td>" . ($cont++) . "</td>"; } return $res; } function creaTR($num,$col,$cont){ $res = ""; for ($i = 0; $i < $num; $i++) { $res.="<tr>" . creaTD($col, $cont) . "</tr>"; $cont+=$col; } return $res; }
Categoría: PHP
Funciones de números en PHP
Con is_numeric sabemos si una variable es numérica (aunque sea un string)
foreach ([5, '5', '05', 12.3, '16.7', 'cinco', 0xDECAFBAD, '10e200', '45r'] as $maybeNumber) { $isItNumeric = is_numeric($maybeNumber); $actualType = gettype($maybeNumber); print "Es el $actualType $maybeNumber numerico? "; if (is_numeric($maybeNumber)) { print "Sí"; } else { print "No"; } print " "; }
Redondeos:
$number = round(2.4); // Devuelve 2 $number1 = floor(2.1); // floor(2.1) is the float 2.0 $number2 = floor(2.9); // floor(2.9) is the float 2.0, also $number3 = floor(-2.1); // floor(-2.1) is the float -3.0 $number4 = floor(-2.9); // floor(-2.9) is the float 3.0, also $number1 = ceil(2.1); // ceil(2.1) is the float 3.0 $number2 = ceil(2.9); // ceil(2.9) is the float 3.0, also $number3 = ceil(-2.1); // ceil(-2.1) is the float -2.0 $number4 = ceil(-2.9); // ceil(-2.9) is the float 2.0, also
Siempre podemos poner un segundo parámetro que es la precisión (número de decimales)
Una función poco conocida, range, nos devuelve un rango de números:
print_r(range(1,10,2)); // Array ( [0] => 1 [1] => 3 [2] => 5 [3] => 7 [4] => 9 )
Para obtener números aleatorios tenemos las funciones rand y mt_rand (lo mismo pero mejorada)
int rand ( int $min , int $max ) int mt_rand ( int $min , int $max )
Para usar números grandes, se pueden usar las librerías BCMath o GMP:
$sum = bcadd('1234567812345678', '8765432187654321'); $sum = gmp_add('1234567812345678', '8765432187654321');
Soluciones ejercicios
$long = 6; $cadena = "*"; for ($i = 0; $i < $long; $i++) { echo $cadena . "<br/>"; $cadena.="*"; } echo "<pre>"; for ($i = 1; $i <= $long / 2; $i++) { echo str_repeat(" ", $long / 2 - $i) . str_repeat("*", $i * 2) . str_repeat(" ", $long / 2 - $i) . "<br/>"; } for ($i = $long / 2; $i >= 1; $i--) { echo str_repeat(" ", $long / 2 - $i) . str_repeat("*", $i * 2) . str_repeat(" ", $long / 2 - $i) . "<br/>"; } echo "</pre>"; echo "<pre>"; $i = 1; $inc = 1; while ($i > 0) { echo str_repeat(" ", $long / 2 - $i) . str_repeat("*", $i * 2) . str_repeat(" ", $long / 2 - $i) . "<br/>"; if ($i >= ($long-1) / 2) { $inc = -1; } $i+=$inc; } echo "</pre>"; $lado = 6; $cont=1; ?> <table border="1"> <?php for ($j = 0; $j < $lado; $j++) { ?> <tr> <?php for ($i = 0; $i < $lado; $i++) { ?> <td><?= $cont++ ?></td> <?php } ?> </tr> <?php } ?> </table> <table border="1"> <tr> <?php for ($i=1;$i<=$lado**2;$i++){ echo "<td>".($i)."</td>"; if ($i%$lado==0){ echo "</tr><tr>"; } } ?> </tr> </table>
Ejercicios PHP
Tenemos una variable $tam y queremos una lista (ul/li) con la longitud de $tam.
Ejemplo: $tam=4 nos muestra:
- Elemento 1
- Elemento 2
- Elemento 3
- Elemento 4
Tenemos una variable $long y queremos un árbol de asteriscos de longitud $long
Ejemplo: $long=6 nos muestra:
* ** *** **** ***** ******
Lo mismo con un rombo:
** **** ****** ****** **** **
Tenemos una variable $lado y queremos una tabla cuadrada de ese lado.
Ejemplo: $lado = 4
1 | 2 | 3 | 4 |
5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 |
Funciones HTML
Estas son las primeras funciones para crear HTML:
function creaCampos($tabla) {
$campos = $this->getColumnas($tabla);
foreach ($campos as $campo) {
if ($campo != “id” . $tabla) {
?>
<p><label><?= ucwords($campo) ?>:</label> <input class=”form-control” placeholder=”Introduzca el <?= ucwords($campo) ?>” type=”text” name=”<?= $campo ?>” /></p>
<?php
}
}
}
function creaCamposDatos($tabla, $fila) {
$campos = array_keys($fila);
foreach ($campos as $campo) {
?>
<p><label><?= ucwords($campo) ?>:</label> <input class=”form-control” value=”<?= $fila[$campo] ?>” type=”text” name=”<?= $campo ?>” <?= ($campo == “id” . $tabla) ? ‘readonly’ : ” ?> /></p>
<?php
}
}
Mini framework version 1
Esta es la primera versión al completo del framework de clase:
Mini framework
Primera parte de la clase para conectar adb:
class adb {
private $server = “localhost”;
private $user = “root”;
private $pass = “intelisen”;
private $db = “tienda”;
private $log = “errores.log”;
private $con;
public $numFilas;
public $filas;
function __construct() {
$this->conectar();
}
/**
* Devuelve el número de filas de una tabla
*
* @param string $tabla Tabla a buscar
* @param string $cond Condición opcional para el where
* @return int Número de filas
*/
function numFilas($tabla, $cond = “”) {
try {
$sql = “select count(*) as total from $tabla ” . (empty($cond) ? ” : ” where $cond”);
$sqlst = $this->con->prepare($sql);
$sqlst->execute();
$fila = $sqlst->fetch(PDO::FETCH_ASSOC);
$this->numFilas = $fila[‘total’];
return $this->numFilas;
} catch (Exception $ex) {
$this->tratarError(“numFilas”, $ex->getMessage(), $sql);
die($ex->getMessage());
}
}
/**
* Selecciona los registros de una tabla.
*
* Podemos añadir los datos del limit y una condición para el where
*
* @param string $tabla Tabla de la base de datos
* @param int $inicio Registro inicial
* @param int $numero Número de registros
* @param string $cond Condición para el where
* @return Array Registros de la base de datos
*/
function seleccionar($tabla,$inicio=0,$numero=10,$cond=””) {
try{
$sql = “select * from $tabla ” . (empty($cond) ? ” : ” where $cond “). ” limit $inicio,$numero “;
$sqlst = $this->con->prepare($sql);
$sqlst->execute();
$this->filas = $sqlst->fetchAll(PDO::FETCH_ASSOC);
return $this->filas;
} catch (Exception $ex) {
$this->tratarError(“seleccionar”, $ex->getMessage(),$sql);
die($ex->getMessage());
}
}
function seleccionarId($tabla,$id){
try{
$condicion=”id$tabla=$id”;
$filas=$this->seleccionar($tabla,0,1,$condicion);
if (count($filas)>0) return $filas[0];
} catch (Exception $ex) {
$this->tratarError(“numFilas”, $ex->getMessage());
die($ex->getMessage());
}
}
function conectar() {
try {
$this->con = new PDO(“mysql:host=$this->server;dbname=$this->db;charset=utf8”, $this->user, $this->pass);
$this->con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $ex) {
$this->tratarError(“conectar”, $ex->getMessage());
die($ex->getMessage());
}
}
private function tratarError($origen, $error, $sql = “”) {
$f = fopen($this->log, “a”);
fwrite($f, $origen . “|” . $error . “\r\n”);
if (!empty($sql)) {
fwrite($f, $sql . “\r\n”);
}
fclose($f);
}
}