Ejemplos repaso

 <?php
 $a = 5;
 echo 'Hola <b>que</b> tal?';
 if ($a == 5) {
 echo '<h1>Cabecera con echo</h1>'
 . '<h2>lalallalala</h2>'
 . '<p>texto tralalala</p>';
 }

 if ($a == 5) {
 ?>
 <h1>Cabecera sin echo</h1>
 <?php
 }

 $p = "cadena";
 $n = 5.5;
 $b = false;
 echo $p;
 $p = 74;
 echo $p;
 $tabla = array(1, 2, 3, 4, 5, 6, 7, 8, 9);
 $tabla2 = [1, 2, 3, 4];

 $tabla3 = ['ana' => 1, "juan" => 3, "rosa" => 5];
 shuffle($tabla);
 for ($i = 0; $i < count($tabla); $i++) {
 echo $tabla[$i] . "<br/>";
 }
 sort($tabla);
 foreach ($tabla as $elemento) {
 echo $elemento . "<br/>";
 }

 foreach ($tabla3 as $clave => $valor) {
 echo $clave . "--->" . $valor . "<br/>";
 }

 echo nombredelafuncion(4, 4);

 echo "##" . levenshtein("Barcelona", "Bracelona");

 cabecera("Ola k ase???");

 echo strrev("Ola k ase???");

 function nombredelafuncion($parametro1, $parametro2) {
 return $parametro1 + $parametro2;
 }

 function cabecera($texto) {
 ?>
 <h1><?= $texto ?></h1>
 <?php
 }

 $server = "localhost";
 $user = "root";
 $password = "";
 $db = "tienda";

 try {
 $conn = new PDO("mysql:host=$server;dbname=$db", $user, $password);
 $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
 $conn->query("SET NAMES 'utf8';");
 } catch (PDOException $e) {
 echo "Connection failed: " . $e->getMessage();
 }

 //Inserta un producto
 $sql = "insert into productos (nombre,precio) values (:nombre,:precio)";
 $st = $conn->prepare($sql);
 $st->execute(array(
 ':nombre' => 'Tuerca',
 ':precio' => 10
 ));
 echo "Filas afectadas: " . $st->rowCount() . "<br/>";
 echo "Id producto: " . $conn->lastInsertId();

 //Borra un producto
 $sql = "delete from productos where idproductos=:idproductos";
 $st = $conn->prepare($sql);
 $st->execute(array(
 ':idproductos' => 11
 ));
 echo "Filas afectadas: " . $st->rowCount() . "<br/>";

 //Editar un producto
 $sql = "update productos set nombre=:nombre, precio=:precio where idproductos=:idproductos";
 $st = $conn->prepare($sql);
 $st->execute(array(
 ':idproductos' => 14,
 ':nombre' => 'arandela',
 ':precio' => 100
 ));
 echo "Filas afectadas: " . $st->rowCount() . "<br/>";

 $sql = "insert into productos (nombre,precio) values (:n,:p)";
 $st = $conn->prepare($sql);
 for ($i = 0; $i < 10; $i++)
 $st->execute(array(
 ':n' => 'producto' . $i,
 ':p' => $i * 3
 ));
 
 $sql="select * from productos";
 $st=$conn->prepare($sql);
 $st->execute();
 while ($row=$st->fetch()){
 echo $row['nombre']."<br/>";
 }
 
 echo "<hr/>";
 $st->execute();
 $filas=$st->fetchAll();
 foreach($filas as $fila_individual){
 echo $fila_individual['nombre']."<br/>";
 }
 ?>

Ejercicio validar mail

$cadenas = ["pepe@pepe.com", "ola k ase??", "@@@....", "hola.ssss@mmv", "pepe.com", "pepe@pepe"];
//Recorrer con for
for ($i = 0; $i < count($cadenas); $i++) {
 echo ($i + 1) . ".- " . $cadenas[$i] . (esMail2($cadenas[$i]) ? '' : ' no ') . " es mail.<br/>";
}
//Recorrer con foreach
foreach($cadenas as $cadena){
 echo $cadena . (esMail3($cadena) ? '' : ' no ') . " es mail.<br/>";
}

function esMail($cadena) {
 $pos1 = strpos($cadena, "@");
 $pos2 = strpos($cadena, ".");
 if ($pos1 !== false && $pos2 !== false && $pos2 > $pos1) {
 return true;
 } else {
 return false;
 }
}

function esMail3($cadena) {
 $pos1 = strpos($cadena, "@");
 $pos2 = strpos($cadena, ".",$pos1);
 return ($pos1 != false && $pos2 !== false);
}
function esMail2($cadena) {
 
 if ($pos = strpos($cadena, "@")) {
 return strpos($cadena, ".", $pos);
 }
 return false;
}

function esMailReg($cadena){
 return preg_match(
'/^[^0-9][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[@][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[.][a-zA-Z]{2,4}$/',
$cadena);
}

function buscaMail($cadena){
 $pattern="/(?:[A-Za-z0-9!#$%&'*+=?^_`{|}~-]+(?:\.[A-Za-z0-9!#$%&'*+=?^_`{|}~-]+)*|\"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*\")@(?:(?:[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?\.)+[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[A-Za-z0-9-]*[A-Za-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])/";
 preg_match_all($pattern,$cadena,$mails);
 return $mails;
}

Funciones Array (2)

Saber si existe un valor en el array:

$os = array("Mac", "NT", "Irix", "Linux");
if (in_array("Irix", $os)) {
    echo "Existe Irix";
}
if (in_array("mac", $os)) {
    echo "Existe mac";
}

Máximo y mínimo de un array:

echo max(2, 3, 1, 6, 7);  // 7
echo max(array(2, 4, 5)); // 5

echo min(2, 3, 1, 6, 7);  // 1
echo min(array(2, 4, 5)); // 2

Ordenar arrays ¡Ojo si son asociativos! (ver manual)

$frutas = array("limón", "naranja", "banana", "albaricoque");
sort($frutas); //No asociativos
$fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple");
asort($fruits);//Asociativos
$fruits = array("d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple");
ksort($fruits); //Ordena por clave
$números = range(1, 20);
shuffle($números); //Desordena

Aplicar una función a todos los elementos del array:

$frutas = array("d" => "limón", "a" => "naranja", "b" => "banana", "c" => "manzana");

function test_alter(&$elemento1, $clave, $prefijo)
{
    $elemento1 = "$prefijo: $elemento1";
}

function test_print($elemento2, $clave)
{
    echo "$clave. $elemento2
\n"; } echo "Antes ...:\n"; array_walk($frutas, 'test_print'); array_walk($frutas, 'test_alter', 'fruta'); echo "... y después:\n"; array_walk($frutas, 'test_print');

Union de arrays:
$union = array_unique(array_merge($a, $b));
Intersección:
$intersection = array_intersect($a, $b);
Diferencia:
$difference = array_diff($a, $b);
Diferencia simétrica:
$difference = array_merge(array_diff($a, $b), array_diff($b, $a));

Arrays multidimensionales en PHP

$b=array(array('A','b'),array('c','d','e','f'),array('g','h','i'));
echo "<pre>";
print_r($b);

echo "</pre>";

echo $b[1][2];
echo "<br/>";
for ($i=0;$i<count($b);$i++){
 for($j=0;$j<count($b[$i]);$j++){
 echo "($i,$j) ".$b[$i][$j]." | ";
 }
 echo "<br/>";
}

foreach($b as $valor){
 foreach($valor as $letra){
 echo $letra."|";
 }
 echo "<br/>";
}


for ($i = 0; $i < 5; $i++)
 for ($j = 0; $j < 5; $j++)
 $c[$i][$j] = $j + $i * 5;

 echo array_to_table($c);
 
function array_to_table($tabla) {
 $res="<table border=1>";
 for ($i = 0; $i < count($tabla); $i++) {
 $res.="<tr>";
 for ($j = 0; $j < count($tabla[$i]); $j++) {
 $res.="<td>" . $tabla[$i][$j] . "</td>";
 }
 $res.="</tr>";
 }
 $res.="</table>";
 return $res;
}

//Mezcla sin sentido, a lo loco:

$tutifruti=array('juan'=>array('a','b','c'),'ana'=>array('c'=>3,'d'=>6,'e'=>8),'rosa'=>array('j','k',array(1,2,3,4)));

var_dump($tutifruti);

Arrays asociativos en PHP

$a=array('Juan'=>'Técnico','Ana'=>'Marketing','Rosa'=>'Administración');
$a['Jose']='Ventas';
echo $a['Juan']."<br/>";
foreach($a as $clave=>$valor){
 echo $clave." - ".$valor."<br/>";
}
echo "<pre>";
print_r($a);
var_dump($a);
echo "</pre>";

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

Funciones de cadena en PHP

Buscar una subcadena dentro de otra. Ejemplo ‘¿Tiene una cadena la @?’:

if (strpos($_POST['email'], '@') === false) {
print 'No hay arroba (@)';
}

Ponemos ‘===’ porque si la arroba está en la posición 0 se entiende como false.

Ejercicio: Comprobar si es un mail ‘básico’. Tiene que tener una arroba y un punto y el punto después de la arroba.

Obtener subcadenas de una cadena. Ejemplo: ‘Obtener los cuatro primeros caracteres del código’.

$substring = substr($string,$start,$length);
$codigo='ABCD123456';
$parte=substr($codigo,0,4); //$parte='ABCD'
$parte=substr($codigo,4,4); //$parte='1234'
$parte=substr($codigo,4); //$parte='123456'
$parte=substr($codigo,-4); //$parte='3456'

Ejercicio: dada una cadena obtener otra con los dos primeros caracteres y los dos últimos.

Función que devuelve una cadena aleatoria de caracteres:

function str_rand($length = 32,
$characters = ↵
'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ') {
if (!is_int($length) || $length < 0) { return false; } $characters_length = strlen($characters) - 1; $string = ''; 1.6 Generating a Random String | 11 for ($i = $length; $i > 0; $i--) {
$string .= $characters[mt_rand(0, $characters_length)];
}
return $string;
}

Mayúsculas y minúsculas:

print ucfirst("how do you do today?"); //Primera letra
print ucwords("the prince of wales"); //primera letra de cada palabra
print strtoupper("i'm not yelling!"); //mayúsculas
print strtolower('one'); // minúsculas

Partir cadenas con explode (por separador):

$words = explode(' ','My sentence is not very complicated');

Con expresiones regulares:

$words = preg_split('/\d\. /','my day: 1. get up 2. get dressed 3. eat toast');
$lines = preg_split('/[\n\r]+/',$_POST['textarea']);

$words = preg_split('/ x /i','31 inches x 22 inches X 9 inches'); //con i es case insensitive

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>