function calcetin($tabla) { $res = []; foreach ($tabla as $clave => $valor) { $res[$valor] = $clave; } return $res; } $t = ["a" => 1, "b" => 3, "c" => 1]; muestraTabla($t); $c = calcetin($t); muestraTabla($c); function contar($tabla, $valor) { $cont = 0; foreach ($tabla as $v) { if ($valor == $v) { $cont++; } } return $cont; } echo esUnico1($t); function esUnico1($tabla) { foreach ($tabla as $valor) { if (contar($tabla, $valor) > 1) { return false; } } return true; } function esUnico2($tabla) { $t = array_count_values($tabla); foreach ($t as $valor) { if ($valor > 1) { return false; } } return true; } function esUnico3($tabla){ sort($tabla); for($i=1;$i<count($tabla);$i++){ if ($tabla[$i]==$tabla[$i-1]){ return false; } } return true; } function esUnico4($tabla){ return count($tabla)==count(array_unique($tabla)); }
Autor: Juan Pablo Fuentes
Ejemplo de función levenheist
echo masParecida("tomato", ["naranja","tomate","platano","morcilla"]); echo masParecida("marnaja", ["naranja","tomate","platano","morcilla"]); function masParecida($entrada, $palabras) { // no se ha encontrado la distancia más corta, aun $distancia = -1; $cercana = ""; // bucle a través de las palabras para encontrar la más cercana foreach ($palabras as $palabra) { // calcula la distancia entre la palabra de entrada y la palabra actual $lev = levenshtein($entrada, $palabra); // verifica por una coincidencia exacta if ($lev == 0) { // la palabra más cercana es esta (coincidencia exacta) return $palabra; } // si esta distancia es menor que la siguiente distancia // más corta o si una siguiente palabra más corta aun no se ha encontrado if ($lev <= $distancia || $distancia < 0) { $cercana = $palabra; $distancia = $lev; } } return $cercana; }
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.
El siguiente código nos devuelve el número de apariciones de una cadena en otra:
function contarCadena($pajar, $aguja) { $pos = strpos($pajar, $aguja); $cont = 0; while ($pos !== false) { $cont++; $pos = strpos($pajar, $aguja, $pos + 1); } return $cont; }
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.
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('<a href="one.php">one</a>'); // minúsculas
Partir cadenas con explode (por separador):
$cadena="hola que tal"; $palabras=explode($cadena); //Array ( [0] => hola [1] => que [2] => tal ) echo implode("-",$palabras);//hola-que-tal
Reemplazar una cadena por otra:
echo str_replace("a", "#", "hola que tal"); //hol# que t#l
Repetir una cadena:
echo str_repeat("|-|",6); //|-||-||-||-||-||-|
Funciones ajedrez y tabla
function ajedrez($tam) { ?> <table > <?php for ($i = 0; $i < $tam; $i++) { ?><tr><?php for ($j = 0; $j < $tam; $j++) { ?><td class="<?= ($i + $j) % 2 == 0 ? "" : "dark" ?>"></td><?php } ?></tr><?php } ?> </table><?php } function tabla($tabla) { ?><table> <?php for ($i = 1; $i <= 10; $i++) { ?> <tr><td><?= $i ?></td><td>x</td><td><?= $tabla ?></td> <td>=</td><td><?= ($i * $tabla) ?></td></tr> <?php } ?> </table><?php }
Ejemplos PHP
Árbol de un lado:
$cadena = "*"; for ($i = 1; $i < 10; $i++) { echo $cadena . "<br/>"; $cadena = $cadena . "*"; }
Árbol de los dos lados:
$tam=8; $cadena = ""; echo "<pre>"; for ($i = 0; $i < $tam; $i++) { for ($j = 0; $j < $tam - $i; $j++) { echo " "; } echo $cadena . "*" . $cadena . "<br/>"; $cadena .= "*"; } echo "</pre>";
Árbol con bolas de navidad:
$tam=8; $cadena = ""; echo "<pre>"; for ($i = 0; $i < $tam; $i++) { for ($j = 0; $j < $tam - $i; $j++) { echo " "; } for ($j = 0; $j < $i * 2 + 1; $j++) { if (rand(1, 10) == 7) { echo "@"; } else { echo "*"; } } echo "<br/>"; } echo "</pre>";
Tablero de ajedrez, css:
td{ width:50px; height:50px; background-color: linen; border: 1px solid #BBBBBB; } .dark{ background-color: black; }
php:
<h1>Tablero de ajedrez</h1> <?php $tam = 8; ?> <table > <?php for ($i = 0; $i < $tam; $i++) { ?><tr><?php for ($j = 0; $j < $tam; $j++) { ?><td class="<?=($i+$j)%2==0?"":"dark"?>"></td><?php } ?></tr><?php } ?> </table>
Examen BD
Ejemplo trigger
CREATE TABLE `customer_log` ( `idcustomer_log` int(11) NOT NULL AUTO_INCREMENT, `customer_id` int(11) DEFAULT NULL, `user` varchar(45) DEFAULT NULL, `fecha` datetime DEFAULT NULL, `nombre` varchar(45) DEFAULT NULL, `nombre_ant` varchar(45) DEFAULT NULL, PRIMARY KEY (`idcustomer_log`) ) DELIMITER // CREATE TRIGGER cliente_actualizado BEFORE UPDATE ON customer FOR EACH ROW BEGIN DECLARE vUser varchar(50); -- Find username of person performing the INSERT into table SELECT USER() INTO vUser; -- Insert record into audit table INSERT INTO customer_log ( customer_id, fecha, user,nombre,nombre_ant) VALUES ( NEW.customer_id, SYSDATE(), vUser,NEW.first_name, OLD.first_name ); END;// DELIMITER ;
Ejemplos desencadenadores (triggers)
Al borrar:
CREATE TRIGGER `sakila`.`actor_BEFORE_DELETE` BEFORE DELETE ON `actor` FOR EACH ROW BEGIN if OLD.actor_id between 1 and 20 then SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'No puedes borrar'; else insert into actor_log(first_name, last_name) values (OLD.first_name, OLD.last_name); end if; END
Al insertar:
CREATE DEFINER=`root`@`localhost` TRIGGER `sakila`.`payment_BEFORE_INSERT` BEFORE INSERT ON `payment` FOR EACH ROW BEGIN if NEW.amount>=10 then set NEW.amount=9.99; end if; END
Al modificar:
CREATE DEFINER=`root`@`localhost` TRIGGER `sakila`.`payment_BEFORE_UPDATE` BEFORE UPDATE ON `payment` FOR EACH ROW BEGIN if NEW.amount > OLD.amount then set NEW.amount=OLD.amount; end if; END
Instrucciones de programación en MySql
Ejercicios Northwind
Insertar en Customers la compañía ‘Compañía XX’ con ‘Ana’, ‘Pi’ como contacto
insert into customers (company,first_name,last_name) values ('Compañía XX','Ana','Pi')
Modificar en Customer el campo email_address y poner ‘Sin email’
update customers set email_address='Sin email'
Eliminar el Customer con id = 20
delete from customers where id=20
Seleccionar todos los proveedores (suppliers) cuyo trabajo sea ‘Sales Manager’
SELECT * from suppliers where job_title='Sales manager'
Seleccionar todos los pedidos (orders) de junio
select * from orders where month(order_date)=6
Calcular el número de pedidos por cliente
SELECT company,count(orders.id) total FROM customers left join orders on customers.id=orders.customer_id group by customers.id
Calcular el total de ventas por empleado
SELECT last_name,first_name,sum(quantity*unit_price*(1-discount)) total FROM employees join orders on employees.id=orders.employee_id join order_details on orders.id=order_details.order_id group by employees.id
Averiguar el producto más caro
SELECT * FROM `products` order by list_price desc limit 1
Averiguar el número de ventas por producto
select products.*, sum(quantity*unit_price*(1-discount)) total from products join order_details on products.id= order_details.product_id group by products.id
Mostrar los clientes con más de 10000 en ventas
select customers.*, sum(quantity*unit_price*(1-discount)) total from customers join orders on customers.id= orders.customer_id join order_details on orders.id= order_details.order_id group by customers.id having total>10000