Funciones php

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;
}

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

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);
}

}