Diferencia entre revisiones de «Usuario:ManuelRomero/php/arrays/concepto»

De WikiEducator
Saltar a: navegación, buscar
(Página creada con «__NOTOC__ {{:Usuario:ManuelRomero/php/arrays/nav}}»)
 
Línea 1: Línea 1:
 
__NOTOC__
 
__NOTOC__
 
{{:Usuario:ManuelRomero/php/arrays/nav}}
 
{{:Usuario:ManuelRomero/php/arrays/nav}}
 +
 +
===Arrays===
 +
*Un tipo de datos compuesto es aquel que te permite almacenar más de un valor.
 +
*En PHP puedes utilizar dos tipos de datos compuestos: el array y el objeto.
 +
*Los objetos los veremos más adelante.
 +
 +
*Un array es un tipo de datos que nos permite almacenar varios valores.
 +
*Cada miembro del array se almacena en una posición a la que se hace referencia utilizando un valor clave.
 +
*Las claves pueden ser numéricas o asociativas.
 +
<source lang=php>
 +
// array numérico
 +
$modulos1 = array(0 => "Programación", 1 => "Bases de datos", ..., 9 => "Desarrollo web en entorno servidor");
 +
// array asociativo
 +
$modulos2 = array("PR" => "Programación", "BD" => "Bases de datos", ..., "DWES" => "Desarrollo web en entorno servidor");
 +
</source>
 +
;Tipos de array:
 +
:En función de su clave pueden ser indexados (clave numérica) o asociativos (Clave con valor)
 +
:En los arrays numéricos empezamos por 0
 +
:En funcion del tipo de índices que tenga rpuede ser unidimensional o multidimensional
 +
===Crear un array===
 +
*Podemos usar el operador array();
 +
<source lang=php>
 +
$capitales = array();
 +
$capital ["españa"=>"madrid", "italia"=>"roma","Alemania"=>"Berlin"];
 +
</source>
 +
*Es lo mismo que hacer
 +
<source lang=php>
 +
$capitales = array("españa"=>"madrid", "italia"=>"roma","Alemania"=>"Berlin");
 +
$capital ["españa"=>"madrid", "italia"=>"roma","Alemania"=>"Berlin"];
 +
*También se puede crear directamente co []
 +
<source lang=php>
 +
$capitales["españa"]="madrid";
 +
$capitales[["italia"]="roma"
 +
$capitales["Alemania"]="Berlin";
 +
</source>
 +
*Existen muchas funciones asociadas a los arrays
 +
*count($array) me da el número de elementos
 +
{{Tarea|
 +
Define un array de 5 ciudades y recorrelo con un bucle for usando count()
 +
}}
 +
<source lang=php>
 +
<?php
 +
//defino e inicializo el vector
 +
$ciudades[0]="Valencia";
 +
$ciudades[]="Teruel";
 +
$ciudades[]="Burgos";
 +
$ciudades[]="Zaragoza";
 +
$ciudades[]="Huesca";
 +
 +
//Obtengo el número de elementos
 +
$num= count($ciudades);
 +
echo "hay $num ciudades";
 +
for ($n=0; $n<$num; $n++){
 +
    echo "ciudad $n es $ciudades[$n]<br>";
 +
}
 +
?>
 +
</source>
 +
 +
===Ver el contenido de un array===
 +
*Podemos usar la función ya conocida '''''var_dump()'''''
 +
*También podemos usar la fucnion print_r.
 +
===Funciones para manejar matrices===
 +
*Tamaño: count(), sizeof()
 +
*Operador +: concatena dos matrices
 +
*Recorrer una matriz next(), prev(),  reset(), current(),key(), reset()
 +
*busqueda preg_grep(), array_search(), in_array()
 +
*Ordenar sort()
 +
*Aquí  tenemos un listado de todas las funciones, hay muchas muchas http://es1.php.net/manual/en/ref.array.php
 +
 +
 +
 +
*Para hacer referencia a los elementos almacenados en un array, tienes que utilizar el valor clave entre corchetes:
 +
<source lang=php>
 +
$modulos1 [9]
 +
$modulos2 ["DWES"]
 +
</source>
 +
*Es interesante recordar que en PHP puedes crear también arrays de varias dimensiones almacenando otro array en cada uno de los elementos de un array.
 +
<source lang=php>
 +
// array bidimensional
 +
$ciclos = array(
 +
    "DAW" => array ("PR" => "Programación", "BD" => "Bases de datos", ..., "DWES" => "Desarrollo web en entorno servidor"),
 +
    "DAM" => array ("PR" => "Programación", "BD" => "Bases de datos", ..., "PMDM" => "Programación multimedia y de dispositivos móviles")
 +
);
 +
</source>
 +
*Para hacer referencia a los elementos almacenados en un array multidimensional, debes indicar las claves para cada una de las dimensiones:
 +
<source lang=php>
 +
$ciclos ["DAW"] ["DWES"]
 +
</source>
 +
*En PHP no es necesario que indiques el tamaño del array antes de crearlo.
 +
*Ni siquiera es necesario indicar que una variable concreta es de tipo array.
 +
*Como ya hemos visto, simplemente puedes comenzar a asignarle valores:
 +
<source lang=php>
 +
// array numérico
 +
$modulos1 [0] = "Programación";
 +
$modulos1 [1] = "Bases de datos";
 +
...
 +
$modulos1 [9] = "Desarrollo web en entorno servidor";
 +
// array asociativo
 +
$modulos2 ["PR"] = "Programación";
 +
$modulos2 ["BD"] = "Bases de datos";
 +
...
 +
$modulos2 ["DWES"] = "Desarrollo web en entorno servidor";
 +
</source>
 +
*En PHP tampoco  es necesario que especifiques el valor de la clave.
 +
*Al omitirla  el array se irá llenando a partir de la última clave numérica existente, o de la posición 0 si no existe ninguna:
 +
<source lang=php>
 +
$modulos1 [ ] = "Programación";
 +
$modulos1 [ ] = "Bases de datos";
 +
...
 +
$modulos1 [ ] = "Desarrollo web en entorno servidor";
 +
</source>
 +
<div class="slide">
 +
 +
 +
 +
 +
{{Tarea|
 +
*Generar un array de 10 posiciones de valores enteros entre 1 y 100.
 +
*Recorrer el array, guardando el valor m�ximo y m�nimo y obtener la media
 +
*Mostrar los resultados por pantalla.
 +
}}
 +
<source lang=php>
 +
<?php
 +
 +
$notas = array();
 +
$tamano = rand(1,50);
 +
//Ahora rellenamos el valor de $tamano posiciones del vector
 +
for ($n=0; $n<$tamano;$n++){
 +
    $notas[$n] = rand(1,10);
 +
}
 +
//recorremos calculando minimo, maximo y media
 +
unset($notas[5]);
 +
//El primer valor del vector inicializa las variables
 +
$min = $notas[0];
 +
$max = $notas[0];
 +
$suma = $notas[0];
 +
for ($n=1; $n<count($notas) ;$n++){
 +
    if ($min>$notas[$n])
 +
        $min=$notas[$n];
 +
    if ($max<$notas[$n])
 +
        $max=$notas[$n];
 +
    $suma+=$notas[$n];
 +
}
 +
echo "La nota máxima es $max<br>";
 +
echo "La nota mínima es $min<br>";
 +
echo "La nota media es es". ($suma/$n);
 +
 +
?>
 +
 +
</source>
 +
{{Tarea|
 +
*Implementar una función que busca si un determinado valor aparece en una matriz.
 +
*La función recibe 2 parámetros: la matriz y el elemento a buscar, y devuelve si ha encontrado el valor (TRUE) o no (FALSE).
 +
 +
#Implementar la función, con los parámetros (el array, y el valor a buscar).
 +
#Para probar la función implementada, generar un array de 100 posiciones de valores enteros entre 1 y 100. #Generar, también, el número que hay que buscar en el array.
 +
#Llamar a la función con el array y el valor como parámetros de la función.
 +
#Mostrar los resultados por pantalla.
 +
}}
 +
{{Tarea|
 +
'''''Random Images'''''
 +
*Escribir un programa que:
 +
**Inicialice un vector con 10 imágenes (podéis utilizar éste [http://www.tecn.upf.es/~ocelma/cpom/practicas/php/random_images/crea_array.txt código.php] que crea el vector $imagenes)
 +
**La página debe mostrar, aleatoriamente, 3 imágenes (puedes usar como alternativa  la función shuffle ($imagenes) la cuál desordena el vector), o usar un rand para obtener indices aleatorios.
 +
**Cada 5 segundos ha de refrescarse la página para ir mostrando imágenes distintas (podéis usar, por
 +
ejemplo, este trozo de código HTML y añadirlo en el <HEAD> de la página:
 +
<source lang=html4strict>
 +
<META HTTP-EQUIV=Refresh CONTENT="5; URL=vuestra_pagina.php">
 +
</html>
 +
</source>
 +
}}
 +
<source lang=html4strict>
 +
<!DOCTYPE html>
 +
<!--
 +
To change this license header, choose License Headers in Project Properties.
 +
To change this template file, choose Tools | Templates
 +
and open the template in the editor.
 +
-->
 +
<html>
 +
    <head>
 +
        <meta charset="UTF-8"/>
 +
        <meta http-equiv="refresh" content="5" url="index.php"/>
 +
        <title></title>
 +
    </head>
 +
    <body>
 +
        <?php
 +
        $imagenes = array(
 +
"http://www.tecn.upf.es/~ocelma/cpom/practicas/php/random_images/discography/a_piece_for_the_wicked_vol_1.jpg",
 +
"http://www.tecn.upf.es/~ocelma/cpom/practicas/php/random_images/discography/double_t.jpg",
 +
"http://www.tecn.upf.es/~ocelma/cpom/practicas/php/random_images/discography/flagrantly_yours.jpg",
 +
"http://www.tecn.upf.es/~ocelma/cpom/practicas/php/random_images/discography/gothic.jpg",
 +
"http://www.tecn.upf.es/~ocelma/cpom/practicas/php/random_images/discography/iliad_of_a_wolverhampton_wanderer.jpg",
 +
"http://www.tecn.upf.es/~ocelma/cpom/practicas/php/random_images/discography/libertine.jpg",
 +
"http://www.tecn.upf.es/~ocelma/cpom/practicas/php/random_images/discography/lullabies_for_tough_guys.jpg",
 +
"http://www.tecn.upf.es/~ocelma/cpom/practicas/php/random_images/discography/nocturnal_nomad.jpg",
 +
"http://www.tecn.upf.es/~ocelma/cpom/practicas/php/random_images/discography/the_idle_gait_of_the_self_possessed.gif",
 +
"http://www.tecn.upf.es/~ocelma/cpom/practicas/php/random_images/discography/the_life_and_times_of_a_ballad_monger.jpg"
 +
);
 +
        $n1=rand(0,9);
 +
        $n2=rand(0,9);
 +
        $n3=rand(0,9);
 +
        echo "<img src=$imagenes[$n1]><img src=$imagenes[$n2]><img src=$imagenes[$n3]>";
 +
        ?>
 +
    </body>
 +
</html>
 +
</source>
 +
 +
===Variables globales Vs superglobales===
 +
*Ya hemos visto como en php una variable tiene el ámbito en el cual es accesible y visible
 +
*Las variables son locales a la función en la cual aparecen, si queremos acceder dentro de una función a una variable del script y actuar sobre su valor, debemos hacerla '''''global'''''.
 +
*PHP Dispone un un importante conjunto de  variables superglobales.
 +
*El desarrollador tiene acceso a dichas variables en cualquier momento del script.
 +
*El sistema se encarga de tenerlas actualizadas, con el valor correspondiente
 +
*PHP incluye unas Son  variables internas predefinidas que pueden usarse desde cualquier ámbito, por lo que reciben el nombre de variables superglobales.
 +
*No  es necesario que uses global para acceder a ellas.
 +
 +
*Cada una de estas variables es un '''''array''''' que contiene un conjunto de valores
 +
*Posteriormente veremos  cómo se utilizan los arrays).
 +
*Aquí puedes acceder a las variables [http://es.php.net/manual/es/language.variables.superglobals.php superglobales] disponibles en PHP se pueden ver  son las siguientes:
 +
*Son las siguientes
 +
#$GLOBALS Hace referencia a todas las variables disponibles en el ámbito global
 +
#$_SERVER  Información del entorno del servidor y de ejecución
 +
#$_GET Variables HTTP GET
 +
#$_POST Variables HTTP POST
 +
#$_FILES Variables de Carga de Archivos HTTP
 +
#$_COOKIE Cookies HTTP
 +
#$_SESSION  Variables de sesión
 +
#$_REQUEST Variables HTTP REQUEST. Un array asociativo que por defecto contiene el contenido de $_GET, $_POST y $_COOKIE.
 +
#$_ENV
 +
*Analizaremos una de ellas
 +
;$_SERVER.
 +
:Contiene información sobre el entorno del servidor web y de ejecución. Entre la información que nos ofrece esta variable, tenemos:
 +
:Principales valores de la variable $_SERVER
 +
#$_SERVER['PHP_SELF']: script  que se está ejecutando actualmente.
 +
#$_SERVER['SERVER_ADDR']: dirección IP del servidor web.
 +
#$_SERVER['SERVER_NAME']: nombre del servidor web.
 +
#$_SERVER['DOCUMENT_ROOT']: directorio raíz bajo el que se ejecuta el guión actual.
 +
#$_SERVER['REMOTE_ADDR']:dirección IP desde la que el usuario está viendo la página.
 +
#$_SERVER['REQUEST_METHOD']:método utilizado para acceder a la página ('GET', 'HEAD', 'POST' o 'PUT')
 +
{{Actividad| Haz un script que nos de la información de las variables vistas anteriormente}}
 +
<source lang=php>
 +
<?php
 +
 +
$datos = $_SERVER;
 +
foreach ($datos as $indice => $valor){
 +
    echo ("Valor de $indice es $valor<br>");
 +
}
 +
?>
 +
</source>

Revisión de 17:01 13 feb 2015



Arrays

  • Un tipo de datos compuesto es aquel que te permite almacenar más de un valor.
  • En PHP puedes utilizar dos tipos de datos compuestos: el array y el objeto.
  • Los objetos los veremos más adelante.
  • Un array es un tipo de datos que nos permite almacenar varios valores.
  • Cada miembro del array se almacena en una posición a la que se hace referencia utilizando un valor clave.
  • Las claves pueden ser numéricas o asociativas.
// array numérico
$modulos1 = array(0 => "Programación", 1 => "Bases de datos", ..., 9 => "Desarrollo web en entorno servidor");
// array asociativo
$modulos2 = array("PR" => "Programación", "BD" => "Bases de datos", ..., "DWES" => "Desarrollo web en entorno servidor");
Tipos de array
En función de su clave pueden ser indexados (clave numérica) o asociativos (Clave con valor)
En los arrays numéricos empezamos por 0
En funcion del tipo de índices que tenga rpuede ser unidimensional o multidimensional

Crear un array

  • Podemos usar el operador array();
$capitales = array();
$capital ["españa"=>"madrid", "italia"=>"roma","Alemania"=>"Berlin"];
  • Es lo mismo que hacer
$capitales = array("españa"=>"madrid", "italia"=>"roma","Alemania"=>"Berlin");
$capital ["españa"=>"madrid", "italia"=>"roma","Alemania"=>"Berlin"];
*También se puede crear directamente co []
<source lang=php>
$capitales["españa"]="madrid";
$capitales[["italia"]="roma"
$capitales["Alemania"]="Berlin";
  • Existen muchas funciones asociadas a los arrays
  • count($array) me da el número de elementos


Icon assess.gif

Tarea

Define un array de 5 ciudades y recorrelo con un bucle for usando count()




<?php
//defino e inicializo el vector
$ciudades[0]="Valencia";
$ciudades[]="Teruel";
$ciudades[]="Burgos";
$ciudades[]="Zaragoza";
$ciudades[]="Huesca";
 
//Obtengo el número de elementos
$num= count($ciudades);
echo "hay $num ciudades";
for ($n=0; $n<$num; $n++){
    echo "ciudad $n es $ciudades[$n]<br>";
}
?>

Ver el contenido de un array

  • Podemos usar la función ya conocida var_dump()
  • También podemos usar la fucnion print_r.

Funciones para manejar matrices

  • Tamaño: count(), sizeof()
  • Operador +: concatena dos matrices
  • Recorrer una matriz next(), prev(), reset(), current(),key(), reset()
  • busqueda preg_grep(), array_search(), in_array()
  • Ordenar sort()
  • Aquí tenemos un listado de todas las funciones, hay muchas muchas http://es1.php.net/manual/en/ref.array.php


  • Para hacer referencia a los elementos almacenados en un array, tienes que utilizar el valor clave entre corchetes:
$modulos1 [9]
$modulos2 ["DWES"]
  • Es interesante recordar que en PHP puedes crear también arrays de varias dimensiones almacenando otro array en cada uno de los elementos de un array.
// array bidimensional
$ciclos = array(
     "DAW" => array ("PR" => "Programación", "BD" => "Bases de datos", ..., "DWES" => "Desarrollo web en entorno servidor"),
     "DAM" => array ("PR" => "Programación", "BD" => "Bases de datos", ..., "PMDM" => "Programación multimedia y de dispositivos móviles")
);
  • Para hacer referencia a los elementos almacenados en un array multidimensional, debes indicar las claves para cada una de las dimensiones:
$ciclos ["DAW"] ["DWES"]
  • En PHP no es necesario que indiques el tamaño del array antes de crearlo.
  • Ni siquiera es necesario indicar que una variable concreta es de tipo array.
  • Como ya hemos visto, simplemente puedes comenzar a asignarle valores:
// array numérico
$modulos1 [0] = "Programación";
$modulos1 [1] = "Bases de datos";
...
$modulos1 [9] = "Desarrollo web en entorno servidor";
// array asociativo
$modulos2 ["PR"] = "Programación";
$modulos2 ["BD"] = "Bases de datos";
...
$modulos2 ["DWES"] = "Desarrollo web en entorno servidor";
  • En PHP tampoco es necesario que especifiques el valor de la clave.
  • Al omitirla el array se irá llenando a partir de la última clave numérica existente, o de la posición 0 si no existe ninguna:
$modulos1 [ ] = "Programación";
$modulos1 [ ] = "Bases de datos";
...
$modulos1 [ ] = "Desarrollo web en entorno servidor";




Icon assess.gif

Tarea

  • Generar un array de 10 posiciones de valores enteros entre 1 y 100.
  • Recorrer el array, guardando el valor m�ximo y m�nimo y obtener la media
  • Mostrar los resultados por pantalla.




<?php
 
$notas = array();
$tamano = rand(1,50);
//Ahora rellenamos el valor de $tamano posiciones del vector
for ($n=0; $n<$tamano;$n++){
    $notas[$n] = rand(1,10);
}
//recorremos calculando minimo, maximo y media
unset($notas[5]);
//El primer valor del vector inicializa las variables
$min = $notas[0];
$max = $notas[0];
$suma = $notas[0];
for ($n=1; $n<count($notas) ;$n++){
    if ($min>$notas[$n])
        $min=$notas[$n];
    if ($max<$notas[$n])
        $max=$notas[$n];
    $suma+=$notas[$n];
}
echo "La nota máxima es $max<br>";
echo "La nota mínima es $min<br>";
echo "La nota media es es". ($suma/$n);
 
?>


Icon assess.gif

Tarea

  • Implementar una función que busca si un determinado valor aparece en una matriz.
  • La función recibe 2 parámetros: la matriz y el elemento a buscar, y devuelve si ha encontrado el valor (TRUE) o no (FALSE).
  1. Implementar la función, con los parámetros (el array, y el valor a buscar).
  2. Para probar la función implementada, generar un array de 100 posiciones de valores enteros entre 1 y 100. #Generar, también, el número que hay que buscar en el array.
  3. Llamar a la función con el array y el valor como parámetros de la función.
  4. Mostrar los resultados por pantalla.






Icon assess.gif

Tarea

Random Images

  • Escribir un programa que:
    • Inicialice un vector con 10 imágenes (podéis utilizar éste código.php que crea el vector $imagenes)
    • La página debe mostrar, aleatoriamente, 3 imágenes (puedes usar como alternativa la función shuffle ($imagenes) la cuál desordena el vector), o usar un rand para obtener indices aleatorios.
    • Cada 5 segundos ha de refrescarse la página para ir mostrando imágenes distintas (podéis usar, por

ejemplo, este trozo de código HTML y añadirlo en el <HEAD> de la página:

<META HTTP-EQUIV=Refresh CONTENT="5; URL=vuestra_pagina.php">
</html>




<!DOCTYPE html>
<!--
To change this license header, choose License Headers in Project Properties.
To change this template file, choose Tools | Templates
and open the template in the editor.
-->
<html>
    <head>
        <meta charset="UTF-8"/>
        <meta http-equiv="refresh" content="5" url="index.php"/>
        <title></title>
    </head>
    <body>
        <?php
        $imagenes = array(
		"http://www.tecn.upf.es/~ocelma/cpom/practicas/php/random_images/discography/a_piece_for_the_wicked_vol_1.jpg",
		"http://www.tecn.upf.es/~ocelma/cpom/practicas/php/random_images/discography/double_t.jpg",
		"http://www.tecn.upf.es/~ocelma/cpom/practicas/php/random_images/discography/flagrantly_yours.jpg",
		"http://www.tecn.upf.es/~ocelma/cpom/practicas/php/random_images/discography/gothic.jpg",
		"http://www.tecn.upf.es/~ocelma/cpom/practicas/php/random_images/discography/iliad_of_a_wolverhampton_wanderer.jpg",
		"http://www.tecn.upf.es/~ocelma/cpom/practicas/php/random_images/discography/libertine.jpg",
		"http://www.tecn.upf.es/~ocelma/cpom/practicas/php/random_images/discography/lullabies_for_tough_guys.jpg",
		"http://www.tecn.upf.es/~ocelma/cpom/practicas/php/random_images/discography/nocturnal_nomad.jpg",
		"http://www.tecn.upf.es/~ocelma/cpom/practicas/php/random_images/discography/the_idle_gait_of_the_self_possessed.gif",
		"http://www.tecn.upf.es/~ocelma/cpom/practicas/php/random_images/discography/the_life_and_times_of_a_ballad_monger.jpg"
		);
        $n1=rand(0,9);
        $n2=rand(0,9);
        $n3=rand(0,9);
        echo "<img src=$imagenes[$n1]><img src=$imagenes[$n2]><img src=$imagenes[$n3]>";
        ?>
    </body>
</html>

Variables globales Vs superglobales

  • Ya hemos visto como en php una variable tiene el ámbito en el cual es accesible y visible
  • Las variables son locales a la función en la cual aparecen, si queremos acceder dentro de una función a una variable del script y actuar sobre su valor, debemos hacerla global.
  • PHP Dispone un un importante conjunto de variables superglobales.
  • El desarrollador tiene acceso a dichas variables en cualquier momento del script.
  • El sistema se encarga de tenerlas actualizadas, con el valor correspondiente
  • PHP incluye unas Son variables internas predefinidas que pueden usarse desde cualquier ámbito, por lo que reciben el nombre de variables superglobales.
  • No es necesario que uses global para acceder a ellas.
  • Cada una de estas variables es un array que contiene un conjunto de valores
  • Posteriormente veremos cómo se utilizan los arrays).
  • Aquí puedes acceder a las variables superglobales disponibles en PHP se pueden ver son las siguientes:
  • Son las siguientes
  1. $GLOBALS Hace referencia a todas las variables disponibles en el ámbito global
  2. $_SERVER Información del entorno del servidor y de ejecución
  3. $_GET Variables HTTP GET
  4. $_POST Variables HTTP POST
  5. $_FILES Variables de Carga de Archivos HTTP
  6. $_COOKIE Cookies HTTP
  7. $_SESSION Variables de sesión
  8. $_REQUEST Variables HTTP REQUEST. Un array asociativo que por defecto contiene el contenido de $_GET, $_POST y $_COOKIE.
  9. $_ENV
  • Analizaremos una de ellas
$_SERVER.
Contiene información sobre el entorno del servidor web y de ejecución. Entre la información que nos ofrece esta variable, tenemos:
Principales valores de la variable $_SERVER
  1. $_SERVER['PHP_SELF']: script que se está ejecutando actualmente.
  2. $_SERVER['SERVER_ADDR']: dirección IP del servidor web.
  3. $_SERVER['SERVER_NAME']: nombre del servidor web.
  4. $_SERVER['DOCUMENT_ROOT']: directorio raíz bajo el que se ejecuta el guión actual.
  5. $_SERVER['REMOTE_ADDR']:dirección IP desde la que el usuario está viendo la página.
  6. $_SERVER['REQUEST_METHOD']:método utilizado para acceder a la página ('GET', 'HEAD', 'POST' o 'PUT')


Icon activity.jpg

Actividad

Haz un script que nos de la información de las variables vistas anteriormente



<?php
 
$datos = $_SERVER;
foreach ($datos as $indice => $valor){
    echo ("Valor de $indice es $valor<br>");
}
?>