Contenidos Unidad 5 · Retorna false si los tipos de los operandos difieren. : Comparar...

22
1 Índice 5.1. Introducción a Cadenas. Variables de cadena. ................................................. 2 5.2. Impresión de cadenas: echo, print, printf. ...................................................... 6 5.3. Tratamiento de cadenas: strlen, trim, mayúsculas y minúsculas. ....................... 7 5.4. Subcadenas. Comparación. Búsqueda ............................................................ 8 5.5. Arrays. Introducción. Tipos de arrays. Acceso a elementos de un array. Almacenamiento de elementos en un array. ........................................................... 11 5.6. Arrays Multidimensionales .......................................................................... 15 5.7. Obtención de múltiples valores de un array................................................... 17 5.8. Chequeo de pertenencia a un array.............................................................. 18 5.9. Recorrido de arrays. Búsqueda de valores en arrays. Ordenación de arrays. ..... 19

Transcript of Contenidos Unidad 5 · Retorna false si los tipos de los operandos difieren. : Comparar...

1

Índice

5.1. Introducción a Cadenas. Variables de cadena. .................................................2 5.2. Impresión de cadenas: echo, print, printf. ......................................................6 5.3. Tratamiento de cadenas: strlen, trim, mayúsculas y minúsculas. .......................7 5.4. Subcadenas. Comparación. Búsqueda ............................................................8 5.5. Arrays. Introducción. Tipos de arrays. Acceso a elementos de un array. Almacenamiento de elementos en un array............................................................ 11 5.6. Arrays Multidimensionales .......................................................................... 15 5.7. Obtención de múltiples valores de un array................................................... 17 5.8. Chequeo de pertenencia a un array.............................................................. 18 5.9. Recorrido de arrays. Búsqueda de valores en arrays. Ordenación de arrays. ..... 19

2

Unidad 05

Cadenas y Arrays

5.1. Introducción a Cadenas. Variables de cadena.

Una parte esencial de PHP, como lenguaje orientado al manejo de páginas web dinámicas,

es la manipulación y presentación en pantalla de cadenas de texto (strings).

En PHP una cadena es cualquier conjunto de caracteres entrecomillados. PHP considera

como cadena todo lo que encuentre entre un par de comillas, por eso todas las cadenas deben

comenzar y terminar con el mismo tipo de comillas, simples o dobles.

Es uno de los posibles tipos de datos para una variable. Este tipo de variables almacenan

textos compuestos de números y/o cifras $cadena=" Hola a todos!". No poseen una longitud

máxima.

El primer tipo de comillas que abre la cadena será el tenido en cuenta por PHP para localizar

su fin. Por eso es válido que dentro de la cadena se incluyan comillas distintas, en cualquier

número. Si nos vemos obligados a incluir comillas del mismo tipo que delimita la cadena,

deberemos usar caracteres de escape:

<?php "este es un 'ejemplo' de cadena válida" "este tambien lo es: that's the question" "y naturalmente 'este otro' tambien vale" "escapando \"comillas\" en una cadena" //doble escape para mostrar la barra invertida //dentro de una cadena: "c:\\windowsprogram.exe" ?>

El contenido de la cadena puede ser asignado como valor de una variable mediante el signo =

<?php $pais = "España"; $pais = 'España'; ?>

PHP analiza el contenido de las cadenas delimitadas por dobles comillas; si encuentra una

variable, la sustituye automáticamente por su valor:

<?php $pais = "España"; $frase = "Yo vivo en $pais"; echo $frase; //volcaria en pantalla la frase "yo vivo en España" //sin embargo $frase = 'yo vivo en $pais'; echo $frase; //volcaria en pantalla la frase "yo vivo en $pais" ?>

3

Nótese que en el segundo ejemplo, php no analiza el contenido de la cadena limitándose a

volcarla, y por ello aparece el nombre de la variable, y no su valor.

Por ello parece recomendable acostumbrarse a usar comillas simples cuando se trata de

simples cadenas de texto, ya que al no ser analizadas antes de su volcado, la ejecución de

nuestros scripts puede ganar velocidad.

Sumando cadenas

Podemos unir el contenido de varias cadenas con un punto (.)

<?php $nombre = "Juan"; $fruta = "manzanas"; $accion = $nombre . "come" . $fruta; //volcaría la frase Juan come manzanas ?>

De esta forma podemos simplificar algo la salida de texto en pantalla. La suma de cadenas

funciona tanto si queremos simplemente volcar el resultado en pantalla, como si queremos

asignar el contenido a una sola variable:

<?php $mi variable .= "primera frase, "; $mi variable .= " segunda frase y "; $mi variable .= "tercera frase. "; // y de forma resumida: $mivariable = "primera frase, " ."segunda frase y " ."tercera frase. "; $mivariable = "primera frase, segunda frase y tercera frase"; ?>

Las diferencias de comillas simples o dobles pasan por las secuencias de escape que

reconocen y el soporte de la interpolación de variables.

Uso de comillas:

• Cadenas entre comillas simples: ‘…’

o No permiten la interpolación de las variables.

o Soportan dos secuencias de escape: \’ y \\.

• Cadenas entre comillas dobles: “…”

o Permiten interpolación de variables

4

o Soportan muchas secuencias de escape (\”, \n, \t, \\, …)

o Se ignoran secuencias de escape desconocidas

Caracteres protegidos de cadenas con comillas dobles

Tabla 1.1 – Caracteres especiales de cadena

Ejemplo 3:

<html>

<head>

<title>Ejemplo de caracteres protegidos de cadenas</title>

</head>

<body>

<?php

$valor=0;

$cadena="Mira lo que contiene esta cadena $valor\n";

echo $cadena."<br>\n";

$cadena2="Mira lo que contiene esta otra \$valor\n";

echo $cadena2."<br>\n";

$cadena3="Fíjate en el \ncódigo fuente \tpara \tver como \rimprime esta cadena";

echo $cadena3;

?>

</body>

</html>

Cuando una cadena va encerrada entre comillas simples, los únicos caracteres de escape que serán comprendidos son "\\" (barra invertida barra invertida) y "\’ "(barra invertida

5

comilla simple). Es decir que salvo por estos caracteres una cadena entre comillas simples

mostrará tal cual lo que se le asigne.

Por otro lado las cadenas se pueden concatenar usando el operador ’.’ (punto).

Ejemplo 4:

<html>

<head>

<title>Ejemplo de cadenas con comillas simples</title>

</head>

<body>

<?php

$str = "Esto es una cadena"; // Asignando una cadena.

$str = $str . " con algo más de texto"; // Concatenando a la cadena.

$num = 9;

$str = "<p>Número: $num</p>";

echo $str;

$num = 9;

$str = ’<p>Número: $num</p>’;

echo $str;

$num = 9;

$str = '<p>\'Número:\' \\$num\\</p>';

echo $str;

?>

</body>

</html>

Se puede acceder a los caracteres dentro de una cadena tratándola como un arreglo de

caracteres indexado numéricamente.

Ejemplo 5:

<html>

<head>

<title>Ejemplo de acceso a caracteres de una cadena</title>

</head>

<body>

<?php

/* Obtener el primer carácter de una cadena. */

6

$str = ’Esto es una prueba.’;

$primero = $str[0];

echo $primero.”<br>”;

/* Obtener el último carácter de una cadena. */

$str = "Esto es aún una prueba";

$ultimo = $str[strlen($str)-1];

echo $ultimo.”<br>”;

?>

</body>

</html>

La función strlen($variable) devuelve la longitud de la cadena contenida en $variable.

5.2. Impresión de cadenas: echo, print, printf.

La impresión implica la generación de código HTML para que lo interprete el navegador.

echo

Construcción del lenguaje que se comporta como una función.

No son necesarios los paréntesis.

Se pueden imprimir múltiples valores separándolos con comas. No se deben utilizar con

paréntesis: echo “uno”, “dos”,”tres”

No puede utilizarse en expresiones.

Permite incluir código HTML.

print

Solo imprime valores simples.

Retorna true si la cadena fue correctamente visualizada.

printf

Imprime cadenas con formato. Es similar a la función de “C” que tiene el mismo nombre.

Un carácter % en la cadena indica una substitución.

7

printf es similar pero no imprime la cadena sino que la retorna.

5.3. Tratamiento de cadenas: strlen, trim, mayúsculas y minúsculas.

A continuación veremos diferentes funciones útiles al momento de trabajar con cadenas de

texto. Hay varias más, pero estas son algunas de las más comunes, que se necesitan para un

manejo básico de cadenas.

trim()

La función Trim() se usa asi: <? trim(cadena) ?>

Su finalidad es eliminar espacios en las puntas de la cadena. También existe rtrim() y

ltrim() para eliminar solo espacios a la derecha o a la izquierda respectivamente de una

cadena pasada como argumento

Veamos un corto ejemplo:

<? $var = " hola que tal "; //mostramos la variable aplicándole la función echo trim($var) ?>

Sale esto... (se eliminaron esos espacios de más)

hola que tal

strlen

La sintaxis de esta función es <? strlen(cadena) ?>

Esta función nos devuelve la cantidad de caracteres de la cadena que le pasamos. Un corto

ejemplo

<? $var = "Esta es mi cadena..."; //aplicamos la funcion... echo strlen($var) ?>

Sale esto...

20

8

Como ven, contó los caracteres de la cadena que le pasamos.

strtolower() y strtoupper()

La sintaxis de estas funciones es similar a las anteriores <? strtolower(cadena) ?> y <? strtoupper(cadena) ?>

Estas funciones convierten todos los caracteres de la cadena a minúsculas o mayúsculas.

Ejemplo:

<?

$var = "EsTAmos APRENdiendo funCIOnes BAsicaS";

//aplicamos las 2 funciones...

echo strtolower($vartxt3),"<BR>",strtoupper($vartxt3);

?>

Sale esto...

estamos aprendiendo funciones básicas

ESTAMOS APRENDIENDO FUNCIONES BASICAS

5.4. Subcadenas. Comparación. Búsqueda

substr

La sintaxis de esta funcione es <? substr(cadena,n1,n2) ?>

Esta función produce una extracción de subcadenas.

n1 es un numero entero, y será a partir del cual se comienza la extracción (parámetro

obligatorio)

n2 es un numero entero, y en caso de estar, la extracción se detendrá en ese carácter.

(Parámetro NO obligatorio)

ejemplo:

<?

$var = "una cadena comun y corriente";

//aplicamos la funcion, mostramos varios resultados

echo substr($var,5),"<BR>";

echo substr($var,15),"<BR>";

echo substr($var,0),"<BR>";

echo substr($var,5,11),"<BR>";

echo substr($var,-1,-3),"<BR>";

echo substr($var,8,-3),"<BR>";

?>

9

Sale esto...

adena comun y corriente

n y corriente

una cadena comun y corriente

adena comun

na comun y corrie

Como se ve, se corta la cadena que pasamos a la función en el primer numero, y se comienza

la extracción. Si no hay segundo numero, se produce hasta el final de la cadena (3 primeros

casos). Si existe el segundo número, al llegar a ese carácter, se detiene la extracción.

str_replace

La sintaxis de esta funcione es <? str_replace(actual,cambia,cadena) ?> Esta función produce un reemplazo del contenido de una cadena.

actual es lo que se busca en la cadena. (en caso de encontrarse, lo que se reemplazará)

cambia es lo que se ubicará en la posición de actual Un ejemplo de esto:

<?

$var = "modificaremos esto";

//aplicamos la funcion, mostramos varios resultados

echo str_replace("mod","MOD",$var),"<BR>";

echo str_replace("modifica","jaaa",$var),"<BR>";

echo str_replace("ficare"," ",$var),"<BR>";

echo str_replace("esto","aquello",$var),"<BR>";

echo str_replace("i"," ",$var),"<BR>";

?>

Sale esto...

MODificaremos esto

jaaaremos esto

modi mos esto

modificaremos aquello

mod f caremos esto

Varias

strrev: Invierte una cadena: str_repeat: Crea una cadena donde se repite una cadena original un numero determinado de veces. Explode: Crea un array de cadenas a partir de una cadena con campos separados. Implode: Crea un cadena a partir de un array de cadenas.

10

Comparación:

Se pueden comparar cadenas mediante operadores o mediante funciones.

Operadores:

==: Convierte operandos que no son cadenas antes de comparar.

===: No convierte a cadenas. Retorna false si los tipos de los operandos difieren.

<,<=,=>,>: Comparar alfabéticamente cada cadena.

Cuando uno de los argumentos es un número, el otro es convertido a número antes de

comparar.

Funciones

Strcmp: Compara dos cadenas. Los números son convertidos antes de comparar.

o Retorno < 0 si string1 se encuentra antes que string2.

o Retorno > 0 si string2 se encuentra antes que string1.

o Retorno = 0 si string1 y string2 son los mismos.

o La comparación es sensible a mayúsculas y minúsculas.

Strcasecmp: convierte las cadenas a minúsculas antes de comparar. Es insensible a

mayúsculas y minúsculas.

11

Búsqueda

• Retornan false cuando la cadena buscada no es localizada.

• strpos: Encuentra la posición de la primer ocurrencia de una cadena en otra.

• strrpos: Encuentra la posición de la última ocurrencia de un carácter en un cadena.

• strstr: Encuentra la primer ocurrencia de una cadena en otra cadena y devuelve el resto

a partir de la ocurrencia.

5.5. Arrays. Introducción. Tipos de arrays. Acceso a elementos de un array. Almacenamiento de elementos en un array.

Un array (o matriz, como también son llamados) es un tipo de variable, con la singularidad

de que no contiene un único valor, sino un conjunto de valores referenciados con un índice.

Aunque al principio puedan parecer poco amistosos, su uso es utilísimo e imprescindible, y de

hecho puedes encontrarlos en todos los lenguajes de programación.

La sintaxis es muy parecida a la usada con el resto de variables, con diferencias en la forma

en que el array es creado y lógicamente, la forma en que su valor es recuperado (pues

teniendo un valor múltiple, tenemos que indicar que valor, o en que forma, deseamos que nos

sea devuelto).

Ejemplo 6:

<html>

<head>

<title>Ejemplo de arreglos</title>

</head>

<body>

<?php

$colores[0]="Rojo";

$colores[1]="Azul";

$colores[2]="Verde";

$colores[3]=5;//No es necesario que sean del mismo tipo

12

echo $colores[3]."<br>";

echo "Mira lo que devuelve ".$colores[2][0];

?>

</body>

</html>

Tipos de Arrays

Arreglos unidimensionales

Los arrays actualmente actúan tanto como tablas hash (arrays asociativos) como arrays

indexados (vectores).

PHP soporta tanto arrays escalares como asociativos. De hecho, no hay diferencias entre los

dos.

Creando arrays

Hay dos formas de crear arrays, estatica o dinámicamente.

Podemos crear arrays de forma estática usando la construcción php array() o list () con la siguiente sintaxis:

Array array([index]=>[valor], [index2]=>[valor], ...);

teniendo en cuenta que podemos asignar manualmente el índice (mas tarde volveremos

sobre esto) o dejar que php lo haga por nosotros.

Supongamos por ejemplo que necesitamos almacenar nombres de ciudades. Podríamos usar

variables simples ($ciudad1="santafe"; y así sucesivamente), o podemos declarar un array:

<?php $mis_ciudades = array( 0=>"santafe", 1=>"parana", 2=>"cordoba"); ?>

Obteniendo un array con una lista indexada de nuestras ciudades. Sabemos que el primer

valor corresponde al índice cero, el segundo al uno, y así sucesivamente (por convención, el

primer valor de un array corresponde siempre -por defecto- al valor cero).

A partir de ahora podemos recuperar cualquier valor específico refiriéndonos a su índice. Por

ejemplo para presentar el nombre de la segunda ciudad podríamos escribir simplemente

<?php

echo $mis_ciudades[1];

?>

como haríamos con cualquier otra variable.

13

Y también podemos crear arrays dinámicamente, sencillamente agregando nuevos valores

a cada elemento del array de manera explícita. Por ejemplo,

<?php

$mis_ciudades[3] = "mendoza";

?>

Cuando se asigna un valor a una variable array usando corchetes vacíos, el valor se añadirá al final del array.

<?php

$mis_ciudades[] = "menzoda";

?>

Agregándose el valor al array. Naturalmente por este mismo sistema también podemos

modificar el valor de un array dado, e incluso añadir valores sin asignar índice, que será

agregado automáticamente por php:

<?php $mis_ciudades[] = "bariloche"; ?>

de tal forma que podemos acceder a este valor utilizando $mis_ciudades[4]

Los arrays se pueden ordenar usando las funciones asort(), arsort(), ksort(), rsort(), sort(), uasort(), usort(), y uksort() dependiendo del tipo de ordenación que se desee.

Se puede contar el número de elementos de un array usando la función count().

Se puede recorrer un array usando las funciones next() y prev(). Otra forma habitual de

recorrer un array es usando la función each().

¿Qué es un arreglo asociativo?

Como ya sabemos, un array sencillo esta formado por conjuntos de parejas índice =>

valor, o como suele expresarse en inglés, key, value. Hasta ahora hemos manejado un

ejemplo con índices o keys numéricos (tamben conocidos como arrays escalares), pero

también podemos usar strings como índices, es decir, cadenas de texto. Este tipo de array es

el array asociativo:

<?php $mis_ciudades = array( "santafe"=>"santafe", "entrerios"=>"parana", "cordoba"=>"cordoba"); ?>

Las ventajas son evidentes: imagina por ejemplo un array agenda construido a base de

parejas email =>tu email, teléfono => tu teléfono etc. O por ejemplo para construir menús de

páginas Web. Los menús que puedes ver aquí están construidos a base de llamadas a distintos

arrays:

14

<?php $temas_disp = array( "index.php"=>"Introducción al ftp", "comandos.php"=>"Comandos básicos", "chmod.php"=>"CHMOD, asignando permisos", "comandosftp.php"=>"Comandos ftp" ); ?>

Acceso a elementos:

nombre_array [clave]

• Clave es el índice del elemento a acceder.

• La clave puede ser un entero o una cadena.

• Usar comillas cuando se interpolen variables como índices.

Almacenamiento

• La primera vez que se almacene un valor se creará el array si no existe anteriormente.

• La recuperación de un elemento no crea el array.

Constructor array() • Creación de arrays indexados

15

• Creación de arrays asociativos.

• Para insertar elementos al final del array utilizar la sintaxis [].

• range(): Crear un array a partir de valores consecutivos enteros o caracteres

• count(), sizeof(): Obtención del tamaño de un array.

Arrays Multidimensionales

Los arrays multidimensionales son bastante simples actualmente. Para cada dimensión del

array, se puede añadir otro valor [clave] al final:

$a[1] = $f; # ejemplos de una sola dimensión

$a["foo"] = $f;

$a[1][0] = $f; # bidimensional

$a["foo"][2] = $f; # (se pueden mezclar índices numéricos y asociativos)

$a[3]["bar"] = $f; # (se pueden mezclar índices numéricos y asociativos)

$a["foo"][4]["bar"][0] = $f; # tetradimensional!

En PHP3 no es posible referirse a arrays multidimensionales directamente dentro de

cadenas.

Por ejemplo, lo siguiente no tendrá el resultado deseado:

$a[3][’bar’] = ’Bob’;

echo "Esto no va a funcionar: $a[3][bar]";

En PHP3, lo anterior tendrá la salida Esto no va a funcionar: Array[bar]. De todas formas, el

operador de concatenación de cadenas se puede usar para solucionar esto:

$a[3][’bar’] = ’Bob’;

echo "Esto no va a funcionar: " . $a[3][bar];

Desde PHP4, sin embargo, todo el problema se puede circunvenir encerrando la referencia al

array (dentro de la cadena) entre llaves:

$a[3][’bar’] = ’Bob’;

echo "Esto va a funcionar: {$a[3][bar]}";

16

Se pueden "rellenar" arrays multidimensionales de muchas formas, pero la más difícil de

comprender es cómo usar el comando array() para arrays asociativos. Estos dos trozos de

código rellenarán el array unidimensional de la misma manera:

Ejemplo:

$a["color"] = "rojo";

$a["sabor"] = "dulce";

$a["forma"] = "redondeada";

$a["nombre"] = "manzana";

$a[3] = 4;

# Example 2:

$a = array(

"color" => "rojo",

"sabor" => "dulce",

"forma" => "redondeada",

"nombre" => "manzana",

3 => 4

);

La función array() se puede anidar para arrays multidimensionales:

<?

$a = array(

"manzana" => array(

"color" => "rojo",

"sabor" => "dulce",

"forma" => "redondeada"

),

"naranja" => array(

"color" => "naranja",

"sabor" => "ácido",

"forma" => "redondeada"

),

"plátano" => array(

"color" => "amarillo",

"sabor" => "paste-y",

"forma" => "aplatanada"

17

)

);

echo $a["manzana"]["sabor"]; # devolverá "dulce"

?>

PHP soporta tanto arreglos escalares como asociativos. De hecho, no hay diferencias entre

los dos, solo que en los arreglos escalares el índice es un número y en los asociativos no.

También se puede crear un arreglo simplemente añadiendo valores al arreglo.

Cuando se asigna un valor a una variable arreglo usando corchetes vacíos, el valor se

añadirá al final del arreglo.

Ejemplo 7:

<html>

<head>

<title>Ejemplo de arreglos asociativos</title>

</head>

<body>

<?php

$colores["primero"]="Rojo";

$colores["segundo"]="Azul";

$colores["tercero"]="Verde";

$colores["cuarto"]=5;

echo $colores["segundo"]."<br>";

/*Otra forma de crear arreglos*/

$a[] = "hola";

$a[] = "mundo";

echo $a[0],$a[1];

?>

</body>

</html>

5.6. Obtención de múltiples valores de un array.

list(): Copia todos los valores del array en variables.

• Si hay más valores en el array que argumentos, éstos son ignorados.

• Si hay menos valores en el array, los valores extras de las variables se setean a NULL.

18

• Dos comillas consecutivas saltean un valor.

array_keys(): Retorna una array con las claves del array original.

array_values(): Retorna un array con los valores del array original.

5.7. Chequeo de pertenencia a un array.

array_key_exists(): Retorna true si la clave indicada existe en el array (aunque tenga un valor nulo).

isset(): Retorna true si el elemento existe y no es nulo.

19

5.8. Recorrido de arrays. Búsqueda de valores en arrays. Ordenación de arrays.

foreach: Permite recorrer el array y acceder a cada elemento del mismo.

• Otra variante permite foreach con acceso a las claves.

• El foreach no opera sobre el array original sino sobre una copia del mismo.

iterador: puntero al actual elemento del array.

Funciones que trabajan con el iterador:

current(), reset(), prev(), end(), key(), each()

No se realiza una copia del array original, lo cual es ideal para arrays muy grandes.

for:

• Utilizado para arrays indexados.

• Se opera sobre el mismo array y no sobre una copia.

20

Búsqueda de valores in_array(): Retorna un valor booleano si el primer argumento se encuentra en el array. PHP indexa los valores en el array por lo que es más rápido que recorrer mediante un loop.

Ordenación Existen tres formas de ordenar arrays:

• Por valor sin cambiar la clave

• Por valor y cambiar la clave

• Por claves

sort():

• Ordena elementos de un array en orden numérico o alfabético ascendente.

• Los índices, numéricos o cadenas, son reasignados.

• Los índices de tipo texto son reemplazados por índices numéricos.

21

asort():

• Ordena elementos de un array en orden numérico o alfabético ascendente.

• Mantiene los valores de los índices.

ksort(): Ordena el array de menor a mayor según la clave.

22

shuffle(): Cambia aleatoriamente el orden de los elementos de un array

array_sum(): Suma los valores de un array indexado o asociativo.

array_filter(): Filtra el contenido de un array según resultado de función.