mayo
31

Generar fechas al azar con PHP

Posted In: PHP, Programación by Mauro Zadunaisky

A veces sucede que debemos llenar una tabla con cientos de miles de registros para probar el rendimiento de una aplicación, de modo que no tengamos sorpresas el día de mañana cuando la base de datos crezca mucho. Por lo general los registros se llenan con información al azar y para eso hemos creado una función que genera fechas al azar dentro de un rango establecido.

	function random_date($from = 0, $to = null) {
		if (!$to) {
			$to = date('U');
		}
		if (!ctype_digit($from)) {
			$from = strtotime($from);
		}
		if (!ctype_digit($to)) {
			$to = strtotime($to);
		}
		return date('Y-m-d h:i:s', rand($from, $to));
	}
marzo
30

PHP: Cómo saber si existe o está definida una función

Usamos function_exists. Ejemplo:

if (function_exists('example_function')) {
	example_function($arg1, $arg2);
}

PHP: Cómo saber si un método de una clase existe o está definido

Usamos method_exists. Ejemplo:

$l10n = new L10n();
if (method_exists($l10n, 'translate')) {
	$translated = $l10n->translate('word');
}

Javascript: cómo saber si una función o método existe o está definida

Javascript no hace distinción entre funciones y métodos, ya que todas son funciones. La forma de hacerlo es:

if (typeof functionName == 'function') {
	functionName();
}

Caso especial: jQuery

En el caso de jQuery la forma de saber si un método está definido es mediante jQuery.fn.nombreFuncion. Ejemplo:

if (typeof jQuery.fn.tinymce == 'function') {
	$('textarea').tinymce();
}
marzo
24

Tenemos el siguiente array

$r = array(
	0 => 'verde',
	1 => 'azul',
	2 => 'verde',
	3 => 'verde',
	4 => 'amarillo',
);

Y queremos eliminar los elementos duplicados, para lo cual tenemos dos opciones

1. array_values + array_unique

$r = array_values(array_unique($r));

2. array_keys + array_flip

$r = array_keys(array_flip($r));

¿Cuál es mejor?

Desde el punto de vista de legibilidad del código ambas opciones son válidas, ya que el comportamiento de cada una de las funciones utilizadas es bastante simple de comprender y se pueden consultar en el manual de PHP. Por lo tanto, lo único que puede determinar la conveniencia de una opción por sobre la otra es el tiempo de ejecución de cada una.

Para determinarlo, hemos realizado un benchmark. Estos son los resultados:

Opción 1 (array_values + array_unique)

-> Testing http://localhost/experimental/array_unique/1.php

Total Requests made: 1000
Total Time elapsed: 14.009807348251 (seconds)

Requests/Second: 71.379 req/sec
Average request time: 0.014 seconds
Standard deviation of average request time: 0.002
Longest/shortest request: 0.017 sec/0.004 sec

Opción 2 (array_keys + array_flip )

-> Testing http://localhost/experimental/array_unique/2.php

Total Requests made: 1000
Total Time elapsed: 13.918713331223 (seconds)

Requests/Second: 71.846 req/sec
Average request time: 0.014 seconds
Standard deviation of average request time: 0.003
Longest/shortest request: 0.017 sec/0.004 sec

Conclusión

La diferencia entre una opción y otra es prácticamente despreciable, así que la conclusión es que da lo mismo usar cualquiera.

Otra idea que podemos rescatar de esto es que realizar comparaciones entre funciones nativas de PHP realmente es un desperdicio de tiempo porque casi nunca se lograrán resultados significativos. Las verdaderas mejoras en la performance de una aplicación o website se consiguen atacando aquellas partes del código que mayores recursos consumen, como por ejemplo: consultas a base de datos, llamados excesivos a funciones recursivas, consumo de webservices, mala gestión de caché, etc.