Funciones recursivas en PHP

Algunos ejemplos:

function factorial($numero) {
 if ($numero <= 1) {
 return 1;
 } else {
 return $numero * factorial($numero - 1);
 }
 }

//Sería equivalente a lo siguiente:
 function factorial5() {
 return 5 * factorial4();
 }

 function factorial4() {
 return 4 * factorial3();
 }

 function factorial3() {
 return 3 * factorial2();
 }

 function factorial2() {
 return 2 * factorial1();
 }

 function factorial1() {
 return 1;
 }

 function fibonacci($n) {
 if ($n <= 2) {
 return 1;
 } else {
 return fibonacci($n - 1) + fibonacci($n - 2);
 }
 }

 function anagrama($cadena, $inicio = "") {
 
 //Si la longitud es uno, el anagrama es el mismo. Como es un nodo final imprimimos el resultado
 if (strlen($cadena) == 1) {
 echo $inicio . $cadena . "<br>";
 return 1;
 } else {
 //Si no el anagrama será cada una de las letras más el anagrama del resto de la cadena
 //Le pasamos como parámetro la cadena de inicio que será la letra más lo que nos hayan
 //pasado como parámetro
 $c=0;
 for ($i = 0; $i < strlen($cadena); $i++) {
 $letra = substr($cadena, $i, 1);
 $c+=anagrama(substr($cadena, 0, $i) . substr($cadena, $i + 1), $inicio . $letra);
 }
 return $c;
 }
 }

Funciones globales

Éstas son las funciones globales disponibles en CakePHP. Muchas de ellas simplemente facilitan la llamada a funciones de PHP con nombres largos, pero otras (como vendor() y uses()) se pueden usar para incluir código o realizar otras funciones útiles. Lo más probable es que si estás buscando una función para realizar una tarea con mucha frecuencia, la encuentres aquí.

__

__(string $string_id, boolean $return =  false)

Esta función gestiona la localización en las aplicaciones CakePHP. El parámetro $string_id identifica la ID de una traducción, mientras que el segundo parámetro indica si se debe mostrar automáticamente la cadena (por defecto), o devolverla para su procesamiento (pasar el valor true para que esto suceda).

Visita la sección Localización e Internacionalización para más información.

am

am(array $uno, $dos, $tres...)

Combina todos los arrays pasados como parámetros y devuelve el array resultante.

config

Puede ser usado para cargar archivos desde el directorio config mediante include_once. La función checa si existe el archivo antes de incluir y regresa un booleano. Toma un número opcional de argumento.

Ejemplo: config('some_file', 'myconfig');

convertSlash

convertSlash(string $cadena)

Sustituye las barras (“/”) por subrayados (“_”) y elimina el primer y el último subrayados en una cadena. Devuelve la cadena convertida.

debug

debug(mixed $var, boolean $showHtml = false)

Si el nivel de depuración, variable de configuración DEBUG, es distinto de cero, se muestra $var. Si $showHTML es true, los datos se formatean para mostrarlos adecuadamente en los navegadores web.

env

env(string $key)

Obtiene una variable de entorno a partir de las fuentes disponibles. Alternativa si las variables $_SERVER o $_ENV están deshabilitadas.

También permite emular las variables PHP_SELF y DOCUMENT_ROOT en los servidores que no permitan su uso. De hecho, es una buena práctica usar env() en lugar de $_SERVER o getenv() (sobretodo si pensamos distribuir el código), ya que ofrece la misma funcionalidad y es totalmente compatible.

fileExistsInPath

fileExistsInPath(string $archivo)

Comprueba que el fichero $archivo está en el include_path actual de PHP. Devuelve un valor booleano.

h

h(string $texto, string $charset)

Alias de la función htmlspecialchars().

pr

pr(mixed $var)

Alias de la función print_r(), añadiendo la etiqueta <pre> a la salida.

stripslashes_deep

stripslashes_deep(array $valor)

Elimina recursivamente las barras invertidas de $valor. Devuelve el array modificado.

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