Vous êtes sur la page 1sur 9

Guía Práctica No 5

Arrays y Funciones en PHP

TIEMPO PARA DESARROLLAR LA PRÁCTICA:


Prepararse para la Práctica y leer los objetivos 10 min.
Desarrollo de Ejemplos 80 min.
Desarrollar Ejercicios propuestos 100 min.
Guardar y apagar equipo. 10 min.

OBJETIVOS

Al finalizar la Práctica, el estudiante será capaz de:


• Identificar el uso y la sintaxis de los arrays en PHP
• Desarrollar script utilizando los diferentes tipos de arrays
• Identificar el uso y la sintaxis de las funciones creadas por el usuario
• Elaborar script que utilicen funciones definidas por el usuario

PROCEDIMIENTO

¿Qué es un array?
Un array es sencillamente una tabla de valores. Cada uno de ellos se identifica y se asigna
mediante una variable ($nombre) seguida de un par de ([ ]) que contiene el índice del array.

El índice puede ser escalar -equivaldría al número de fila de la tabla, por poner un ejemplo- o
puede ser asociativo que equivaldría en alguna medida al nombre de la fila de la tal tabla.

Arrays escalares:
Los elementos de un array escalar puede escribirse usando la siguiente sintaxis:

$a[ ]=valor ó $a[xx]=valor

En el primero de los casos, PHP asigna automáticamente como índice el valor siguiente al
último asignado. Si es el primero que se define, le pondrá como índice 0 (CERO). En el
segundo de los casos, seremos nosotros quienes pongamos (xx) el número correspondiente al
valor del índice.
Si al índice ya se le hubiera asignado un valor, cambiará el valor de la variable, en caso
contrario creará un nuevo elemento del array.

Arrays asociativos
Los elementos de un array asociativo puede escribirse usando la siguiente sintaxis:
$a["indice"]=valor
En este caso, el índice será una cadena y se escribirá entre comillas.

Arrays bidimensionales
Un array bidimensional recoge valores de una tabla de doble entrada. Cada uno de los
elementos se identifica y se asigna mediante una variable ($nombre) seguida de dos ([ ]) que
contienen los índices del array.

Los índices puede ser escalares -equivaldrían al número de fila y columna que la celda
ocuparía en la tabla, o puede ser asociativo que equivaldría en alguna medida a usar como
índices los nombres de la fila y de la columna.
Arrays escalares
Los elementos de un array bidimensional escalar puede escribirse usando la siguiente sintaxis:

$a[ ][ ]=valor ó $a[xx][ ]=valor ó también $a[ ][xx]=valor ó $ a[xx][yy]=valor

En el primero de los casos, PHP asigna automáticamente como primer índice el valor siguiente
al último asignado a ese mismo índice. Si es el primero que se define, le pondrá como índice 0
(CERO). Con la sintaxis del primer supuesto, al segundo índice le asignará cero ya que es en
este mismo momento cuando se habrá creado el primer índice y por tanto aún carecerá de
elementos.

En el segundo de los casos, si somos nosotros quienes asignamos valor al primer índice (xx)
será el segundo quien se incremente en una unidad respecto al de valor más alto de todos
aquellos cuyo primer índice coincide con el especificado.

La tercera opción es similar a la anterior y en la cuarta se pueden asignar libremente cada uno
de los índices (xx e yy) poniendo valores numéricos.

Arrays asociativos
Los elementos de un array asociativo BIDIMIENSIONAL puede escribirse usando la siguiente
sintaxis:

$a["indice1"]["indice2"]=valor
En este caso, los índice serán cadenas y se escribirán entre comillas.

Arrays multidimensionales
PHP permite el uso de arrays de dimensiones superiores a dos. Bastaría con añadir corchetes
para modificar la dimensión del array.

$a[x][y][z]=valor;
asignar a un valor al elemento de índices x, y y z de un array tridimensional y

$a[x][y][z][w]=valor;

haría lo mismo, ahora con un array de dimensión cuatro.

También podrían utilizarse índices asociativos sin más que introducir dentro de los corchetes
las cadenas de asignación de índices, como siempre entre comillas.

La función array();
Para asignar valores a una matriz puede usarse la función array() que tiene la siguiente
sintaxis:

$a= array (
indice 0 => valor,
..... ,
indice n => valor,
);

Por ejemplo:
$z=array (
0 => 2,
1 => "Pepe",
2 => 34.7,
);
produciría el mismo resultado que escribir:

$z[0]=2;
$z[1]="Pepe";
$z[2]=34.7;

Anidando en array();
La función array() permite escribir arrays de cualquier dimensión utilizando la técnica de
anidado.

Si pretendemos escribir los elementos de este array:


$z[0][0]=34;
$z[0][1]=35;
$z[0][2]=36;
$z[1][0]=134;
$z[1][1]=135;
$z[1][2]=136;

podríamos hacerlo así:

$z=array(
0 => array (
0 => 34,
1 => 35,
2 => 36,
),
1 => array (
0 => 134,
1 => 135,
2 => 136,
)
);

Como puede observarse se trata de sustituir los valores asignados a los elementos de una
primera función array() por otra nueva función array que contiene los segundos índices así
como los valores asignados a los mismos.
El anidado sucesivo permitiría generar una matriz de cualquier dimensión.

Aunque en el ejemplo anterior nos hemos referido a un array escalar idéntico procedimiento
sería válido para arrays asociativos sin más que cambiar los índices por cadenas escritas entre
comillas.

Este podría ser un ejemplo de array asociativo


$z["a"]["A"]=34;
$z["a"]["B"]=35;
$z["a"]["C"]=36;
$z["b"]["A"]=134;
$z["b"]["B"]=135;
$z["b"][C]=136;

que podría definirse así


$z=array(
"a" => array (
"A" => 34,
"B" => 35,
"C" => 36,
),
"b" => array (
"A" => 134,
"B" => 135,
"C" => 136,
)
);

Foreach
El bucle foreach permite el recorrido de elementos complejos como las matrices de una forma
sencilla. La sentencia foreach permite directamente recorrer cada uno de los elementos y
asignarles un nombre que sea más sencillo de procesar.

Foreach (Nombrearreglo as Variable)


{
Bloque de instrucciones;
}

Para explicarlo mejor veamos el siguiente código


<?php
$Nombres[0]='Abraham';
$Nombres[1]='Agustín';
$Nombres[2]='Javier';
echo "<B>Bucle clásico</B><Br>\n";
for ($i = 0; $i < 3; $i++)
{
echo "Un autor de este libro se llama:<B> $Nombres[$i]</B>";
echo "<BR>\n";
}
echo "<B>Bucle foreach</B><BR>\n";
foreach ($Nombres as $autor)
echo "Un autor de este libro se llama:<B> $autor</B><BR>\n";
?>

Como verán es más optimo en este caso usar foreach que el simple For.
La sentencia Foreach admite otra sintaxis para permitir recorres arrays asociativos y recuperar
simultáneamente la clave y el valor de cada elemento.

Foreach (nombrearreglo as Clave => Valor)


{
bloque de instrucciones;
}

El funcionamiento de esta función se basa en el hecho de que cada vez que se recupera el
siguiente para, se introduce el valor en la variable de nombre $Valor y el valor de la clave en la
variable de nombre $Clave.

Ejemplo.
<?php

$Nombres = array ('primero' => 'Javier',


'segundo' => 'Jorge',
'tercero' => 'Santiago');

echo "<B>Bucle foreach</B><BR>\n";


foreach ($Nombres as $clave => $autor)
{
echo "Un autor de este libro se llama:<B> $autor</B>\n";
echo " y su clave es <B>$clave</B>.<BR>\n";
}
?>

Hay que observar que en el programa anterior, una vez obtenida la clave, el elemento puede
ser referenciado dentro del bucle foreach como $autor o como $Nombre [$clave]

Manejando funciones
PHP dispone de una herramienta llamada función. Una función es un trozo de código, que
permite desarrollar una tarea concreta y bien definida, que se encuentra separado del resto de
las funciones del programa, al que se le ha dado un nombre para poder referenciarlas. A través
de este se puede llamar a la función cada vez que sea necesario. La sintaxis es la siguiente.
Function nombredelafunción ($parametro1, $parametro2, ...$parametroN).

Las funciones PHP definidas por el usuario tienen la siguiente sintaxis:


function nombre()
{
.....
...instrucciones...
... funciones PHP...
}

Es imprescindible respetar estrictamente la sintaxis: function, () y escribir dentro de las llaves el


código correspondiente a esa función.

Las funciones PHP no se ejecutan en tanto y cuanto no sean invocadas.


Fíjate en el primero de los ejemplos. Nos devuelve una página en blanco porque pese a estar
definida la función no es invocada.

Para invocar una función la sintaxis es esta:


echo nombre()

Al ser llamada con esta sintaxis, se ejecutan las instrucciones contenidas en la función.

Aunque en versiones anteriores de PHP era necesario definir la función antes de invocarla, a
partir de la versión 4 no es necesaria esa organización secuencial.

La función y la llamada pueden estar escritas en cualquier parte del documento. En el tercero
de los ejemplos, la llamada a la función está escrita antes de definir la función.

Utilizando valores externos


Si se invoca una variable -definida previamente- desde una función tomará valor NULO.
Recuerda que cuando estudiamos las variables PHP veíamos que se excluyan las funciones
del ámbito de las variables, salvo que, se asignara a las mismas ámbito global dentro de la
propia función.

En la function a1() del ejemplo, puedes comprobar este extremo y en la function a2() puedes
comprobar como asignado ámbito global SI toma los valores de esa variable.

Una de las formas de asignar valores a las variables internas es definir variables y valores
dentro del paréntesis que va detrás de function nombre, así por ejemplo:

function p1($a=2,$b=5)
Esos valores - 2 y 5 - serían utilizado por la función independientemente de que las variables
$a y/o $b pudieran contener otros distintos en el ámbito externo de la función.
Otra forma de asignación de valores a las variables internas de una función es pasar los
parámetros por valor. Para hacerlo la sintaxis es la siguiente:
En la definición de la función deben incluirse tantas variables como valores distintos pretendan
pasarse. Por ejemplo:

function p1($a,$b)
prepararía la función para recibir dos valores pero requeriría que además, en la llamada a la
función se escribieran esos dos valores separados por comas. Por ejemplo:

p1(47,-32)

Una variante del ejemplo anterior, sería sustituir -en la llamada a la función- las constantes por
variables predefinidas tal como puede verse en la función a5 de los ejemplos.

Funciones que devuelven valores


Las funciones PHP pueden ejecutarse desde un script y volver a recoger en el mismo script los
resultados. Para conseguir este resultado debemos escribir dentro de la función la instrucción
return seguida de la variable o la instrucción cuyo valor pretendemos sea devuelto al script
desde el que ha sido llamada la función.

Traspaso de parámetros
Para pasar un parámetro a una función, es necesario que esta lo tenga definido en la
declaración de la función. Para definir un parámetro en una función, simplemente hay que
poner el nombre que se le quiere dar al parámetro, siguiendo las reglas de la definición de
variables, en la lista de parámetros de la función.
Ejemplo
Function tres($nombre)
{
if ($nombre == “Sara”)
{return 18;}
else
{return ( rand(100) );}
}

Parámetros por defecto


Para pasar un parámetro a una función y que este tome valores predeterminados cuando
desde la llamada a la función no se le ha proporcionado ningún valor, se deben colocar siempre
en las últimas posiciones de la lista de argumentos de la función. Ejemplo de esto es el
siguiente código.
Function ejemplo1($uno, $dos=45, $tres=ZR)
{
codigo de la funcion;
}

Devolución de datos de una función


Algunas funciones es necesario que devuelva un valor por ejemplo
Function ejemplo2($uno)
{
codigo de la función;
return ($valor);
}

y esto funciona muy bien en la mayoría de los problemas que tenemos que resolver mediante
las funciones. Pero que pasa si necesitamos que una función devuelva mas de una valor. Para
estas ocasiones es necesario crearse una matriz que contenga los valores y que la función
devuelva dicha matriz.
Function ejemplo3($uno)
{
codigo de la función;
return array($valor1, $valor2, $valor3);
}

Hay que recordar que existen variables locales y variables globales. Para declarar una variable
local solo vasta con hacer lo siguiente:
$variable1 = ”Rodrigo”;

Para el caso de las variables globales se puede hacer lo siguiente.


GLOBALS $varibleglobal1;

En caso de necesitar una matriz de variables globales se debe hacer lo siguiente:


$GLOBALS $varibleglobal1; $varibleglobal2; $varibleglobal3;

y para acceder a esta matriz de variables globales se le debe de llamar de la siguiente forma:
$GLOBALS [$variableglobal3]

Variables Global
Mediante una declaración de variables globales, dentro de una función, permitimos que dicha
función pueda acceder a variables externas a la misma:
<?php     
  function mifuncion()
     {
           global $pais;
           echo $pais;
     }
  $pais = "España";
  mifuncion();
  echo $pais;
?> 

Mediante el uso de la declaración global de la variable dentro de la función, instruimos a PHP


de que no ha de crear una nueva variable local, sino que va a utilizar en la función el valor de la
variable externa, con el mismo alcance que las variables externas. El resultado es que se
imprimirá el contenido de la variable (España) dos veces, una en la ejecución normal del script
y otra al ejecutarse la función llamada desde el script.

Variables estáticas
Una variable estática solo existe sólo en el ámbito local de una función y permite que la variable
no pierda su valor cuando la ejecución del programa abandona ese ámbito. De esta forma
cuando se vuelve a llamar la función, todas la variables que se declararon como estáticas
recuperan su valor con el que terminaron en la llamada anterior de la misma función.

Ejemplo:
<HTML>
<HEAD><TITLE>Ejemplo de variables estáticas</TITLE></HEAD>
<BODY>
<?php

function contar()
{
static $contador;
$local = 0;
for ($i = 1; $i < 3; $i++)
{
echo "Ejecuto un bucle. Voy por la iteración $i <BR>\n";
$local ++;
$contador++;
}

echo "Al finalizar el bucle las variables valen:<br>\n";


echo "Contador = $contador<BR>\n";
echo "local = $local<BR>\n";
echo "<HR>\n";
}

for ($i = 1; $i < 4; $i++)


contar();

?>

</BODY>
</HTML>

Pasando parámetros por referencia


Tal como estamos viendo, por defecto las funciones PHP pueden recibir valores de variables
externas y utilizar esos valores sin que el valor original de la variable sufra modificación.

Una manera de forzar que la función modifique los valores externos de la variable es lo que se
llama en argot «pasar por referencia»

La manera de hacerlo es:


Hay que anteponer al nombre de la variable el símbolo & y PHP interpretará que la estamos
pasando por referencia.

El & puede anteponerse tanto en la definición de la función -fíjate en la función a2 del ejemplo
61 - como en la llamada a la función, tal como puedes ver en el caso de a3 en el ejemplo
anterior.

La segunda de las opciones nos concede mayor libertad ya que nos permite usar una sola
función y decidir en las llamadas la forma de pasar los parámetros, con lo cual una misma
función puede ser llamada tanto por valores como por referencia.

¿ Desventajas de las funciones definidas por el usuario ?


PHP consume mas recursos (y por tanto es ligeramente mas lento) llamando y ejecutando una
función que ejecutando código que encuentra en línea, embebido en el script. Por eso no tiene
sentido usar funciones salvo que efectivamente vayas a utilizar esa porción de código varias
veces.
Ejercicios:

1. Elabore un programa que lea una lista de nombres de aves en cualquier orden y luego
las ordene en orden alfabético.

2. En la empresa constructora Simón S.A. se tienen registradas las horas trabajadas por
sus obreros en cada uno de los 6 días laborales de la semana. Diseñe un programa
que lea los datos y luego calcule lo siguiente:

• El total de horas que hizo cada obrero en la semana.


• El total de horas que se trabajaron en cada día en la empresa.
• El total que la empresa tiene que pagar por salarios, si el costo por hora es de
10 colones.

3. Utilizando arrays crear un script que funcione como una agenda personal, el arreglo
deberá de tener los siguientes elementos (Nombre completo del contacto, teléfono
casa, teléfono celular, dirección, mail). El escript contara con opciones de navegación
para mostrar los registros (Ir al primer, Ir al ultimo, Ir al anterior e Ir al siguiente) Mínimo
10 Registros.

4. Crear una función que calcule el factorial de un numero entre 1 y 69 si se ingresa otro
numero que no esta en este rango mandar un mensaje.

5. Crear una función que cree la tabla de multiplicar de cualquier número.

6. Crear una función que calcule la raíz cuadrada de cualquier numero.

7. Crear una funcion que muestre cualquier tabla de multiplicar dado el numero por el
usuario.

Vous aimerez peut-être aussi