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;
}
function array_to_table2($tabla) {
$res = "<table border=1>";
foreach ($tabla as $n) {
$res .= "<tr>";
foreach ($n as $el) {
$res .= "<td>" . $el . "</td>";
}
$res .= "</tr>";
}
$res .= "</table>";
return $res;
}
Autor: Juan Pablo Fuentes
Formador de programación y bases de datos
Arrays multidimensionales
En PHP los arrays multidimensionales se crean con arrays dentro de arrays:
function muestraTabla($tabla) {
echo "<pre>";
print_r($tabla);
echo "</pre>";
}
$m=array(
array(1,2),
array(3,4),
);
muestraTabla($m);
for($i=0;$i<count($m);$i++){
for ($j=0;$j<count($m[$i]);$j++){
echo $m[$i][$j]."<br/>";
}
}
foreach ($m as $n){
foreach ($n as $el){
echo $el."<br/>";
}
}
Podemos tener las dimensiones que queramos:
$m = array(
array(
array(0, 1),
array(2, 3)
),
array(
array(4, 5),
array(6, 7)
),
array(
array(8, 9),
array(10, 11)
),
);
muestraTabla($m);
for ($i = 0; $i < count($m); $i++) {
for ($j = 0; $j < count($m[$i]); $j++) {
for ($k = 0; $k < count($m[$i][$j]); $k++) {
echo $m[$i][$j][$k] . "<br/>";
}
}
}
foreach ($m as $n) {
foreach ($n as $el) {
foreach ($el as $e) {
echo $e . "<br/>";
}
}
}
Lo mismo que usamos para recorrer lo podemos usar para generar:
for ($i = 0; $i < 10; $i++) {
for ($j = 0; $j < 10; $j++) {
$m[$i][$j]=$j+$i*10;
}
}
muestraTabla($m);
Un array puede ser cualquier combinación de valores, asociativos, arrays dentro de arrays dentro de arrays….
$tablaLoca = array(
"juan",
"pepe" => array(1, 2, 3),
array(
array("a","b"),
"w"
),
5,
"ppp"=>array(
"q"=>3,
"w"=>array(1,2,array(7,8))
)
);
muestraTabla($tablaLoca);
Si quisiéramos acceder a los valores de una tabla como la anterior necesitaríamos una función recursiva:
function valores($var){
$res="";
if (is_array($var)){
foreach($var as $v){
$res.=valores($v);
}
}
else{
$res=$var.",";
}
return $res;
}
echo valores($tablaLoca);
Ordenar por funciones propias
Con usort(), uasort() y uksort() podemos ordenar por funciones propias. Esto nos da mucha flexibilidad a la hora de ordenar. Ejemplos:
function muestraTabla($tabla) {
echo "<pre>";
print_r($tabla);
echo "</pre>";
}
function miOrden($a, $b) {
$la = strlen($a);
$lb = strlen($b);
return $la < $lb ? -1 : 1;
}
function acentos($name1, $name2) {
$patterns = array(
'a' => '(á|à|â|ä|Á|À|Â|Ä)',
'e' => '(é|è|ê|ë|É|È|Ê|Ë)',
'i' => '(í|ì|î|ï|Í|Ì|Î|Ï)',
'o' => '(ó|ò|ô|ö|Ó|Ò|Ô|Ö)',
'u' => '(ú|ù|û|ü|Ú|Ù|Û|Ü)',
'n '=>'(ñ)'
);
$name1 = preg_replace(array_values($patterns), array_keys($patterns), $name1);
$name2 = preg_replace(array_values($patterns), array_keys($patterns), $name2);
return strcasecmp($name1, $name2);
}
$array1 = array("no", "ño", "na", "ña","ánimo","oído","ópera","nzuelo");
usort($array1,'miOrden');
muestraTabla($array1);
usort($array1,'acentos');
muestraTabla($array1);
Ejercicio pares impares y lista
function muestraTabla($tabla) {
echo "<pre>";
print_r($tabla);
echo "</pre>";
}
$numeros = array(2, 56, 3, 765, 4, 8, 90, 99, 23);
foreach ($numeros as $n) {
if ($n % 2 == 0) {
$pares[] = $n;
} else {
$impares[] = $n;
}
}
muestraTabla($pares);
muestraTabla($impares);
function elementosLista($cadena){
$tabla=explode("</li>",$cadena);
array_pop($tabla);
foreach($tabla as $c=>$v){
$tabla[$c]=strip_tags($v);
}
return $tabla;
}
function elementosListaMejor($cadena){
$cadena= strip_tags(str_replace("</li><li>", "~", $cadena));
$tabla=explode("~",$cadena);
return $tabla;
}
$cad="<ul><li>hola</li><li>que</li><li>tal</li></ul>";
$t=elementosListaMejor($cad);
muestraTabla($t);
Ejemplos funciones de cadena
function eliminaVocalesLargo($cadena){
$cadena= str_ireplace("a", "#", $cadena);
$cadena= str_ireplace("e", "#", $cadena);
$cadena= str_ireplace("i", "#", $cadena);
$cadena= str_ireplace("o", "#", $cadena);
$cadena= str_ireplace("u", "#", $cadena);
return $cadena;
}
function eliminaVocales($cadena,$char="#"){
$vocales="aeiou";
for ($i=0;$i<strlen($vocales);$i++){
$cadena= str_ireplace(substr($vocales,$i,1), $char, $cadena);
}
return $cadena;
}
function esVocal($cadena){
$vocales="aeiou";
return stripos($vocales,$cadena)!==false && strlen($cadena)==1;
}
function esVocal2($cadena){
$vocales="aeiou";
for ($i=0;$i<strlen($vocales);$i++){
if (substr($vocales,$i,1)==$cadena){
return true;
}
}
return false;
}
function contarVocales($cadena){
$cont=0;
for($i=0;$i<strlen($cadena);$i++){
if (esVocal(substr($cadena,$i,1))){
$cont++;
}
}
return $cont;
}
function masVocales(...$cadenas){
$a="";
foreach($cadenas as $c){
if (contarVocales($c)>contarVocales($a)){
$a=$c;
}
}
return $a;
}
function sortString($cadena){
$c=str_split( $cadena);
sort($c);
return implode('',$c);
}
function ordenar($cadena){
$vocales="";
$consonantes="";
for($i=0;$i<strlen($cadena);$i++){
$letra=substr($cadena,$i,1);
if (esVocal($letra)){
$vocales.=$letra;
}
else{
$consonantes.=$letra;
}
}
return sortString($vocales).sortString($consonantes);
}
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 con número variable de argumentos en PHP
Algunos ejemplos:
function suma(...$numeros) {
$a = 0;
foreach ($numeros as $n) {
$a += $n;
}
return $a;
}
function mayor(...$numeros) {
$a = $numeros[0];
foreach ($numeros as $n) {
if ($n > $a) {
$a = $n;
}
}
return $a;
}
function masLarga(...$cadenas) {
$a = "";
foreach ($cadenas as $c) {
if (strlen($c) > strlen($a)) {
$a = $c;
}
}
return $a;
}
Árbol y tabla
$tam = 10;
echo "<pre>";
for ($i = 0; $i < $tam; $i++) {
echo str_pad(str_repeat("*", $i * 2) . "*", $tam * 2 + 1, " ", STR_PAD_BOTH) . "<br/>";
}
$cad="*";
for ($i = 0; $i < $tam; $i++) {
echo str_pad($cad, $tam * 2 + 1, " ", STR_PAD_BOTH) . "<br/>";
$cad.="**";
}
?>
</pre>
<table border="1">
<?php
for ($i = 0; $i < $tam; $i++) {
?>
<tr>
<?php
for ($j = 0; $j < $tam; $j++) {
?>
<td><?=$j==$i || $j==$tam-1-$i?"1":" " ?></td>
<?php
}
?>
</tr>
<?php }
?></table>