PHP (5)


Sumar valores de un multigimensional Array

En ocasiones nos encontramos con un array como el siguiente

[0] => Array
    (
        [id] => 95659865986
        [name] => test
        [cantidad] => 20.00
    )
[1] => Array
    (
        [id] => 95659865987
        [name] => test2
        [cantidad] => 28.00
    )

y queremos suma ‘cantidad’ de todo el array. Podriamos recorrer el array y guardarnos el valor en una variable

$sum = 0;

foreach($array as $num => $values) {
    $sum += $values[ 'cantidad' ];
}

o también podemos usar un array_sum

$sum = array_sum(array_column($array, 'cantidad'));

array_column esta disponible desde PHP 5.5, pero si teneis una versión antigua de PHP podeis usar array_column por ramsey




ternary operator

A menudo nos encontramos que tenemos que usar un if else en alguna situación que sería un poco incómodo tener que trabajar con if(){} else {} por ejempo si queremos ocultar o mostrar alguna parte de codigo html.

<button <? if($val == 1){ ?> class=”active”<? } ?> > button </button>

es por esto que podemos usar formas simplificadas de los if

<button <?=($val == 1 ? ‘class=”active”’ : ‘’ )?> button </button>

también podemos tener el caso de que queremos mostrar una tabla, que completamos con un for, while, … o cualquier otro bucle, y queremos mostrar los valores. Podemos tener casos de que todas las columnas a completar alguna quede vacía (porque no tiene valor) y decidamos que no queremos columnas vacías, y las queramos rellenar con un 0. Para esto lo común es un number_format, un if, sumarle 0 (chapuza), etc… pero cómo quiero que quede un código entendible y no que una etiqueta html tenga una parrafada de php tengo una solución muy sencilla

$val ?: 0

Este código muestra $val y cuando $val no existe muestra un 0, estamos sustitullendo el siguiente codigo

if($val){ echo $val; } else { $echo 0; }

Tambien podriamos combinar varias operaciones

$valid = true;

$lang = 'french';

$x = $valid ? ($lang === 'french' ? 'oui' : 'yes') : ($lang === 'french' ? 'non' : 'no');

echo $x; // outputs 'oui'



Get URL Content por CURL

/* gets the data from a URL */

function get_data($url) {
	$ch = curl_init();
	$timeout = 5;
	curl_setopt($ch, CURLOPT_URL, $url);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
	$data = curl_exec($ch);
	curl_close($ch);
	return $data;
}
$returned_content = get_data('https://vasili.es');



¿ Cual es el limite ?

La flexibilidad de la programación, al menos gran parte de lenguajes, es como una goma elástica, se puede estirar y estirar, pero si te pasas se rompe. El limite lo ha de poner el programado.




Hacer las cosas mal, es más caro

Hoy revisando Jsend para un proyecto, me acordado de la de problemas que me he encontrado con sistemas montados de la forma que «el guru de la empresa de las bases de datos» decía, y resultaba ser terrible… Yo no sabia nada de bases de datos hasta que hice ASIX, y aprendí SQL. Lo primero que enseñan es a estructurar la base de datos, a crear relaciones, crear tablas de relación… y todo con un objetivo, lograr una base de datos que sea fácil de entender, que sea rápida, y que pueda crecer.

Pero que pasa cuando, en una base de datos en MySQL, haces las cosas como te parecen? no sigues ninguna estructura, no creas relaciones…

  • Pasan muchas cosas, primero que hacer una conexión a esa Base de datos se hace muy complejo (mas horas, mas dinero)..
  • Pasa que no puedes dar un paso sin preguntar al «guru»  ‘la columan «c1» que es?’, ‘indicia si se puede vender o no’, si, C1, yo sigo buscando el porque…
  • Pasa que si no creas tablas de relación porque «entonces tienes muchas tablas en la base de datos» para obtener un valor tienes que atacar siempre a la misma tabla inmensa, lo que hace que todo se ralentice…
  • Pasa que si la base de datos esta mal hecha, y tienes una infinidad de datos en la tabla, al hacer una consulta, se caiga mysql, y el administrador de sistemas te coma la oreja diciendo que mi sentencia esta mal,  «POR FAVOR!»

Pero todo esto da igual, solo hay un motivo por el que lograras que algún día, se hagan las cosas bien, es un razonamiento sencillo «hacer las cosas mal, es más caro«. Si eres capaz de hacer entender que aplicar reglas como JSend, poner nombres a las variables con sentido, crear tablas de relación, etc… evitaría problemas y dinero (nunca olvidar la coletilla del dinero), puedes tener cualquier informático desarrollando, no al «guru», que todo podrá crecer sin necesidad de hacer desde 0, y un largo etc.

Nada que se hace rápido, o para la ocasión, sera funcional en un futuro.