1. Arreglos
PROGRAMACIÓN PARA INTERNET
● Los arreglos son los reyes indiscutibles de las
estructuras de datos avanzadas en PHP.
● Los arreglos en PHP son extremadamente flexibles,
permiten llaves numéricas de incremento automático,
llaves alfanuméricas o una mezcla de ambos, y son
capaces de almacenar casi cualquier valor, incluyendo
otros arreglos.
● Con más de setenta funciones para la manipulación
de ellos, los arreglos pueden hacer en la práctica
cualquier cosa que puedas imaginar y algo más.
Lic. Nancy Michelle Torres Villanueva 1
2. Arreglos...
PROGRAMACIÓN PARA INTERNET
● Todos los arreglos son colecciones ordenadas
de elementos, llamados elementos.
● Cada elemento tiene un valor, y es identificada
por una llave que es exclusiva del arreglo al
que pertenece.
● Las claves pueden ser números enteros o
cadenas.
Lic. Nancy Michelle Torres Villanueva 2
4. Acceso a los valores
PROGRAMACIÓN PARA INTERNET
Los valores contenidos en un arreglo se
pueden recuperar y modificar usando
corchetes [ ].
Lic. Nancy Michelle Torres Villanueva 4
5. PROGRAMACIÓN PARA INTERNET
● Siguiente llave numerica mas grande
$x[] = 10;
● Asignamos en que llave guardar
$x[’aa’] = 11;
● Imprimimos lo guardado en la llave 0, lo cual
será 10
echo $x[0];
Lic. Nancy Michelle Torres Villanueva 5
6. PROGRAMACIÓN PARA INTERNET
$newArray[0] = "PHP";
$newArray[1] = "MySQL";
$newArray[2] = "Apache";
● ¿Qué hace?
$newArray[2] = "Cherokee";
Lic. Nancy Michelle Torres Villanueva 6
7. PROGRAMACIÓN PARA INTERNET
$shopping = array( );
$shopping[] = "Leche";
$shopping[] = "Cafe";
$shopping[] = "Azucar";
● En que posiciones ha quedado cada elemento?
Lic. Nancy Michelle Torres Villanueva 7
8. PROGRAMACIÓN PARA INTERNET
$array = array(
"primero"=>1,
"segundo"=>2,
"tercero"=>3);
● Qué imprime?
print $array["segundo"];
Lic. Nancy Michelle Torres Villanueva 8
9. PROGRAMACIÓN PARA INTERNET
$numeros = array(
1=>"uno",
"dos",
"tres",
"cuatro");
● Cuál es la llave del item “tres”??
Lic. Nancy Michelle Torres Villanueva 9
10. PROGRAMACIÓN PARA INTERNET
$numeros = array(
1=>"uno",
3=>"tres",
5=>"cinco");
$numeros[]="otro";
● En que llave quedó el elemento “otro”?
Lic. Nancy Michelle Torres Villanueva 10
11. PROGRAMACIÓN PARA INTERNET
$a = array (
’4’ => 5,
’a’ => ’b’);
$a[] = 44;
● En qué llave quedará el item 44?
Lic. Nancy Michelle Torres Villanueva 11
12. PROGRAMACIÓN PARA INTERNET
$a = array (
’A’ => “Esta es una A”,
’B’ => “Esta es una B”);
$a[] = “Esta que será”;
● En qué llave quedará el item “Esta que será”?
Lic. Nancy Michelle Torres Villanueva 12
13. PROGRAMACIÓN PARA INTERNET
$numeros = array(1=>"uno", 3=>"tres",
5=>"cinco");
$numeros[2] = "dos";
$numeros[4] = "cuatro";
$numeros[6] = "seis";
● En que orden ha quedado el arreglo?
Lic. Nancy Michelle Torres Villanueva 13
14. PROGRAMACIÓN PARA INTERNET
● Se dice pues que las llaves son
automáticamente incrementales y siempre los
elementos se agregarán en el siguiente valor
mayor posible y al final del arreglo.
● Tenga en cuenta que las llaves diferencian
entre mayúsculas y minúsculas. Por lo tanto, la
llave "A" es diferente de 'a', pero las llaves '1' y
1 son los mismos.
Lic. Nancy Michelle Torres Villanueva 14
15. Impresión de arreglos
PROGRAMACIÓN PARA INTERNET
● PHP provee dos funciones para imprimir el
valor de una variable recursivamente:
● print_r()
● var_dump()
Lic. Nancy Michelle Torres Villanueva 15
16. print_r() y var_dump()
PROGRAMACIÓN PARA INTERNET
● var_dump() muestra además el tipo de dato
● var_dump() puede mostrar el valor de varias
variables al mismo tiempo
● print_r() puede regresar el valor como una
cadena
Lic. Nancy Michelle Torres Villanueva 16
17. Arreglos multidimensionales
PROGRAMACIÓN PARA INTERNET
● A menudo los datos no pueden ser
representados en un arreglo sencillo de escalar
en valores enteros, cadenas, booleanos, y
flotantes. Algunos datos sólo pueden estar
representados cuando los arreglos tienen otros
arreglos de valores.
Lic. Nancy Michelle Torres Villanueva 17
18. PROGRAMACIÓN PARA INTERNET
$array = array();
$array[] = array(
’tu’,
’yo’);
$array[] = array(
’el’,
’nos’);
echo $array[0][1] . $array[1][0];
● Qué imprime?
Lic. Nancy Michelle Torres Villanueva 18
21. Asignando a variables
independientes
PROGRAMACIÓN PARA INTERNET
● A veces es más fácil trabajar con los valores de
un arreglo mediante la asignación a las
variables individuales. Si bien esto puede ser
logrado mediante la extracción de elementos
individuales y la asignación de cada uno de
ellos a una variable diferente, PHP ofrece un
acceso rápido.
Lic. Nancy Michelle Torres Villanueva 21
22. $info = array('café', 'color', 'cafeína');
● Todas las variables
PROGRAMACIÓN PARA INTERNET
list($bebida, $color, $componente) = $info;
● Solo algunas variables
list($bebida, , $componente) = $info;
● Solo la tercera
list( , , $componente) = $info;
Lic. Nancy Michelle Torres Villanueva 22
23. Unión de arreglos
PROGRAMACIÓN PARA INTERNET
● Se logra con el operador +
● Los elementos con llaves repetidas solo se
muestran una vez, si el contenido es distinto,
esto representa perdida de información
Lic. Nancy Michelle Torres Villanueva 23
24. PROGRAMACIÓN PARA INTERNET
$a = array (1, 2, 3);
$b = array (’a’ => 1, ’b’ => 2, ’c’
=> 3);
$c = $a+$b;
● Cuál es el contenido de $c?
Lic. Nancy Michelle Torres Villanueva 24
25. PROGRAMACIÓN PARA INTERNET
$a = array (1, 2, 3);
$b = array (’a’ => 1, 2, 3);
$c = $a+$b;
● Cuál es el contenido de $c?
Lic. Nancy Michelle Torres Villanueva 25
26. PROGRAMACIÓN PARA INTERNET
$a = array ('a' => 1,
'b' => 2,
'c' => 3);
$b = array ('a' => 4,
'b' => 5,
'c' => 6);
$c = $a+$b;
● Cuál es el contenido de $c?
Lic. Nancy Michelle Torres Villanueva 26
27. PROGRAMACIÓN PARA INTERNET
$cosas = array("silla", "mesa",
"maleta", "caja");
$edificios = array("casa", "depa",
"palacio");
$partes = array("cabeza", "pies");
$agregados = $partes + $edificios +
$cosas;
● Cuál es el contenido de $agregados?
Lic. Nancy Michelle Torres Villanueva 27
28. Unión de arreglos sin perder
elementos
PROGRAMACIÓN PARA INTERNET
● La funcion array_merge() concatena uno o
mas arreglos, agregandolos al final.
● Si los arreglos tienen llaves de cadenas
iguales, entonces el ultimo valor va a
sobrescribir por la vez previa en que aparecio
la llave.
Lic. Nancy Michelle Torres Villanueva 28
31. Operadores de comparación de
arreglos
PROGRAMACIÓN PARA INTERNET
● ==
Mismo número de elementos con las mismas
llaves sin importar el orden.
● ===
Mismo par llave/valor en el mismo orden
Lic. Nancy Michelle Torres Villanueva 31
32. Tamaño de un arreglo
PROGRAMACIÓN PARA INTERNET
● El tamaño de un arreglo puede ser obtenido
con la función count().
● Funciona con cualquier variable, no
necesariamente arreglos, si se quiere asegurar
de que lo este usando en un arreglo, deberá
primero utilizar la función is_array()
Lic. Nancy Michelle Torres Villanueva 32
33. PROGRAMACIÓN PARA INTERNET
$a = array (1, 2, 4);
$b = array();
$c = 10;
echo count($a);
echo count($b);
if is_array($c)
echo count($c);
Lic. Nancy Michelle Torres Villanueva 33
34. Repeticiones de un elemento en
el arreglo
PROGRAMACIÓN PARA INTERNET
● count() devuelve el total de elementos en un
arreglo, pero si se desea contar de manera
unica los elementos se utiliza
array_count_values().
● Devuelve un arreglo asociando cada elemento
con la cantidad de repeticiones.
Lic. Nancy Michelle Torres Villanueva 34
36. Determinar si un elemento en una
posición dada existe
PROGRAMACIÓN PARA INTERNET
$a = array (’a’ => 1, ’b’ => 2);
echo isset ($a[’a’]);
echo isset ($a[’c’]);
$a = array (’a’ => NULL, ’b’ => 2);
echo isset ($a[’a’]);
● Qué impresiones se obtienen?
Lic. Nancy Michelle Torres Villanueva 36
37. Determinar si una llave existe
PROGRAMACIÓN PARA INTERNET
$a = array (’a’ => NULL, ’b’ => 2);
echo array_key_exists ('a',$a);
● Qué aparece en pantalla?
Lic. Nancy Michelle Torres Villanueva 37
38. Buscar si un elemento existe en
el arreglo
PROGRAMACIÓN PARA INTERNET
$a = array (’a’ => NULL, ’b’ => 2);
echo in_array (2, $a);
● Qué aparece en pantalla?
● Se puede pasar un tercer parámetro para
obligar el tipo de dato.
Lic. Nancy Michelle Torres Villanueva 38
39. Obtener la posición de un
elemento en el arreglo
PROGRAMACIÓN PARA INTERNET
● array_search() funciona igual que in_array()
solo que este devolverá la llave. Si el valor no
fue encontrado devuelve false.
● Tiene un tercer parámetro opcional para obligar
la concordancia del tipo de dato
$a = array (’a’ => NULL, ’b’ => 2);
echo array_search (2, $a);
● Qué aparece en pantalla?
Lic. Nancy Michelle Torres Villanueva 39
40. Un arreglo con las llaves
PROGRAMACIÓN PARA INTERNET
● Con array_keys() se obtiene un arreglo con las
llaves de otro arreglo.
● Se pueden poner parámetros opcionales y
entonces solo devolverá las llaves de los
elementos indicados en los parámetros.
Lic. Nancy Michelle Torres Villanueva 40
42. Un arreglo sin llaves
PROGRAMACIÓN PARA INTERNET
● La función array_values() genera un nuevo
arreglo solamente con los valores y olvida las
llaves
Lic. Nancy Michelle Torres Villanueva 42
43. Eliminación de elementos
PROGRAMACIÓN PARA INTERNET
● Un elemento puede ser eliminado de un
arreglo, o un arreglo completo se puede
eliminar llamando a unset ( ).
● Sin embargo, la eliminación de un elemento no
reasigna indices.
Lic. Nancy Michelle Torres Villanueva 43
44. PROGRAMACIÓN PARA INTERNET
$favoritos = array("PHP", "Ace",
"COBOL", "Java", "C++");
● Eliminar COBOL del arreglo
unset($favoritos[2]);
Lic. Nancy Michelle Torres Villanueva 44
45. Eliminando elementos repetidos
PROGRAMACIÓN PARA INTERNET
● La función array_unique() devuelve un arreglo
sin items repetidos.
● Si el arreglo tiene llaves, se quedará con la
primer llave, y las siguientes ocasiones en que
se repita, serán omitidas.
Lic. Nancy Michelle Torres Villanueva 45
46. Un arreglo rellenado
PROGRAMACIÓN PARA INTERNET
● La función array_fill() crea un arreglo rellenado
con el dato indicado.
● Se debe indicar la primer llave, la cantidad de
repeticiones y el dato a repetir.
$unidad = array_fill(2, 5, "uno");
Array ( [2] => uno [3] => uno [4] =>
uno [5] => uno [6] => uno )
Lic. Nancy Michelle Torres Villanueva 46
47. Arreglo con una serie
PROGRAMACIÓN PARA INTERNET
● La función range() crea un arreglo con una
serie dentro.
● Se debe indicar el primer valor y el último valor.
Puede indicarse como parámetro opcional el
tipo de incremento
$letras = range("a", "z", 5);
Array ( [0] => a [1] => f [2] => k
[3] => p [4] => u [5] => z )
Lic. Nancy Michelle Torres Villanueva 47
48. Invertir un llaves por valores
PROGRAMACIÓN PARA INTERNET
● La función array_flip() invierte las llaves por
los valores en un arreglo.
$a = array (’a’, ’b’, ’c’);
array_flip ($a);
["a"]=> 0 , ["b"]=> 1 , ["c"]=> 2)
Lic. Nancy Michelle Torres Villanueva 48
49. Invertir el orden de un arreglo
PROGRAMACIÓN PARA INTERNET
● La función array_reverse() invierte el orden de
los elementos de un arreglo.
$cont = array("cero", "uno", "dos",
"tres", "cuatro");
$inverso = array_reverse($cont);
Array ( [4] => cuatro [3] => tres [2]
=> dos [1] => uno [0] => cero )
Lic. Nancy Michelle Torres Villanueva 49
50. Convertir un arreglo en una
cadena
PROGRAMACIÓN PARA INTERNET
● La función implode() regresa una cadena
creada por la union de cada uno de los
elementos en el arreglo, insertando una cadena
de unión entre cada elemento.
● join() es un alias de implode() y funciona
exactamente igual
$animales = array("canguro", "leon",
"jirafa”);
implode(", ", $animales);
Lic. Nancy Michelle Torres Villanueva 50
51. Convertir una cadena en un
arreglo
PROGRAMACIÓN PARA INTERNET
● La función explode() regresa un arreglo de
cadenas creadas por la ruptura de una cierta
cadena en cada ocurrencia despues de un
separador dado
$palabras = explode(" ", "Ahora es el
momento");
print_r($palabras);
Array ( [0] => Ahora [1] => es [2] => el [3] =>
momento )
Lic. Nancy Michelle Torres Villanueva 51
52. Iteraciones en un arreglo
PROGRAMACIÓN PARA INTERNET
● Existen varias funciones para poder trabajar co
las iteraciones dentro de un arreglo
● reset() Reinicia el puntero del arreglo para poder
recorrerlo.
● prev() Recorre el puntero a la posición anterior
● next() Recorre el puntero a la siguiente posición
● current() Entrega el valor guardado en la posición
actual
● key() Devuelve la llave de la posición actual
● end() Mueve el puntero a la posición final
Lic. Nancy Michelle Torres Villanueva 52
53. $array = array(’foo’ => ’bar’, ’baz’,
’bat’ => 2);
PROGRAMACIÓN PARA INTERNET
function displayArray($array) {
reset($array);
while (key($array) !== null) {
echo key($array).": ".current($array);
next($array);
}
}
Lic. Nancy Michelle Torres Villanueva 53
54. foreach()
PROGRAMACIÓN PARA INTERNET
● Es una manera sencilla de recorrer una arreglo.
$array = array(’foo’, ’bar’, ’baz’);
foreach ($array as $key => $value) {
echo "$key: $value";
}
Lic. Nancy Michelle Torres Villanueva 54
55. Iteraciones con funciones
PROGRAMACIÓN PARA INTERNET
● array_walk()
Aplica una función definida por el usuario a cada
miembro de un arreglo.
● array_walk_recursive()
Aplica una función definida por el usuario
recursivamente a cada miembro de un arreglo.
Lic. Nancy Michelle Torres Villanueva 55
56. $frutas = array("d" => "limon", "a"
=> "naranja", "b" => "platano", "c"
=> "manzana");
PROGRAMACIÓN PARA INTERNET
function test_print($valor, $llave)
{
echo "$llave. $valor<br />n";
}
array_walk($frutas, 'test_print');
Lic. Nancy Michelle Torres Villanueva 56
57. $frutas = array("d" => "limon", "a"
=> "naranja", "b" => "platano", "c"
=> "manzana");
PROGRAMACIÓN PARA INTERNET
function test_alter(&$valor, $llave,
$prefix)
{
$valor = "$prefix: $valor";
}
array_walk($frutas,
'test_print','Fruta: ');
Lic. Nancy Michelle Torres Villanueva 57
58. $dulce = array('a' => 'manzana', 'b'
=> 'platano');
PROGRAMACIÓN PARA INTERNET
$frutas = array('dulce' => $dulce,
'acido' => 'limon');
function test_print($valor, $llave)
{
echo "$llave tiene $valorn";
}
array_walk_recursive($frutas,
'test_print');
Lic. Nancy Michelle Torres Villanueva 58
59. Ordenar un arreglo
PROGRAMACIÓN PARA INTERNET
● Los elementos de un arreglo se ordenan
ascedente o descendentemente, sin embargo,
las llaves se perderan en el proceso.
● sort() Ascendentemente
● rsort() Descendentemente
● Se tiene un segundo parámetro opcional para
indicar si el ordenamiento será alfabético o
numérico
Lic. Nancy Michelle Torres Villanueva 59
60. Banderas de ordenamiento
PROGRAMACIÓN PARA INTERNET
● SORT_REGULAR – Compara items
normalmente (No cambia los tipos)
● SORT_NUMERIC – Compara items
numéricamente
● SORT_STRING – Compara items como
cadenas
● SORT_LOCALE_STRING – Compara items
como cadenas basado en la configuración local
Lic. Nancy Michelle Torres Villanueva 60
62. PROGRAMACIÓN PARA INTERNET
$arr = array ("1", 10, "Maria",
"maria", "Memo", 1, 5, 9);
sort($arr);
● En que orden quedará este arreglo?
Lic. Nancy Michelle Torres Villanueva 62
63. Ordenar un arreglo manteniendo
las llaves
PROGRAMACIÓN PARA INTERNET
● Para que al ordenar las llaves se mantengan,
se utilizan las funciones:
● asort() Ascendentemente
● arsort() Descendentemente
Lic. Nancy Michelle Torres Villanueva 63
64. Ordenar un arreglo por sus llaves
PROGRAMACIÓN PARA INTERNET
● Hemos visto como ordenar un arreglo en base
a sus elementos, pero también podemos
ordenarlo en base a sus llaves.
● ksort() Ascendentemente
● krsort() Descendentemente
Lic. Nancy Michelle Torres Villanueva 64
65. Ordenar un arreglo utilizando una
función definida por el usuario
PROGRAMACIÓN PARA INTERNET
● Si deseas ordenar un arreglo de alguna otra
manera que no sea numérica o
alfabéticamente, puedes crear tu propia función
y luego mandar a ordenar con esa función.
● usort( ) Ordena el arreglo basado en el valor de
cada elemento aplicando una nueva llave
● uasort( ) Mantiene el par llave/valor
● uksort( ) Reordena los elementos basado en la
llave de cada elemento
Lic. Nancy Michelle Torres Villanueva 65
66. function cmp_length($a, $b)
{
PROGRAMACIÓN PARA INTERNET
if (strlen($a) < strlen($b))
return -1;
if (strlen($a) > strlen($b))
return 1;
//Si el tamaño es igual
return 0;
}
Lic. Nancy Michelle Torres Villanueva 66
68. Desordenando un arreglo
PROGRAMACIÓN PARA INTERNET
● La función shuffle() desacomoda un arreglo de
manera random. Las llaves se pierden
Lic. Nancy Michelle Torres Villanueva 68
69. Obtener un elemento random
PROGRAMACIÓN PARA INTERNET
● La función array_rand() toma uno o mas
elementos random del arreglo y devuelve la
llave de estos.
Lic. Nancy Michelle Torres Villanueva 69
70. Arreglos como pilas y colas
PROGRAMACIÓN PARA INTERNET
● PHP ofrece funciones para las actividades de
push y pull en las pilas y para shift y unshift en
las colas.
● array_push
● array_pop
● array_shift
● array_unshift
Lic. Nancy Michelle Torres Villanueva 70
71. PROGRAMACIÓN PARA INTERNET
$stack = array();
array_push($stack, ’bar’, ’baz’);
$last_in = array_pop($stack);
$queue = array(’qux’, ’bar’, ’baz’);
$first_element = array_shift($queue);
array_unshift($queue, ’foo’);
Lic. Nancy Michelle Torres Villanueva 71
72. Diferencia entre dos arreglos
PROGRAMACIÓN PARA INTERNET
● La función array_diff() compara dos arreglos y
devuelve la diferencia.
● Devuelve un arreglo con todas las entradas del
arreglo1 que no estan en los demás arreglos.
● No toma en cuenta las llaves, de modo que si
se desea tomar en cuenta las llaves, se utiliza
array_diff_assoc()
Lic. Nancy Michelle Torres Villanueva 72
73. Diferencia entre dos arreglos en
base a sus llaves
PROGRAMACIÓN PARA INTERNET
● Para buscar las diferencias entre dos arreglos
tomando en cuenta las llaves se utiliza la
función array_diff_key()
● En ambas funciones se puede utilizar una
función definida por el usuario y las funciones a
utilizar son array_diff_uassoc() y
array_diff_ukey()
Lic. Nancy Michelle Torres Villanueva 73
74. Intersección de dos arreglos
PROGRAMACIÓN PARA INTERNET
● La función array_intersect() devuelve todos
los elementos del arreglo1 que existen en los
demás arreglos.
● Si se desea revisar también las llaves se utiliza
la función array_intersect_assoc().
● array_intersect_key() se utiliza para validar
las llaves.
● array_intersect_ukey() y
array_intersect_uassoc() para validar con una
función
● Lic. Nancy Michelle Torres Villanueva 74
79. Question
¿Cómo se declaran
arreglos?
Programación para Internet
Lic. Nancy Michelle Torres Villanueva
80. Answer
$variable = array();
$var[]= “cosa”;
Programación para Internet
Lic. Nancy Michelle Torres Villanueva
81. Question
¿Cuáles son los dos tipos de
arreglos y cuáles son sus
diferencias?
Programación para Internet
Lic. Nancy Michelle Torres Villanueva
82. Answer
Normales y Asociativos
Los normales son los que no
llevan un indice en cambio los
asociativos si llevan indice.
Programación para Internet
Lic. Nancy Michelle Torres Villanueva
83. Question
¿Cómo elimino un
arreglo?
Programación para Internet
Lic. Nancy Michelle Torres Villanueva
84. Answer
unset ($arreglo[pos]); este
elimina una posición y no
reordena.
unset ($arreglo); este
elimina todo
Programación para Internet
Lic. Nancy Michelle Torres Villanueva
85. Question
¿Cómo separo una
cadena en varias partes
de un arreglo?
Programación para Internet
Lic. Nancy Michelle Torres Villanueva
86. Answer
Con la función explode()
$variable = explode(" ", "ahora es el
tiempo");
Programación para Internet
Lic. Nancy Michelle Torres Villanueva
87. Question
¿Cómo genero una
cadena a partir de un
arreglo?
Programación para Internet
Lic. Nancy Michelle Torres Villanueva
88. Answer
Con la función implode o join
print "Animales que he visto: " .
implode(", ", $animalesVistos);
Programación para Internet
Lic. Nancy Michelle Torres Villanueva
89. Question
¿Cómo ordeno un arreglo
sin perder el orden de las
llaves(índices)?
Programación para Internet
Lic. Nancy Michelle Torres Villanueva
90. Answer
Con la función asort()
Programación para Internet
Lic. Nancy Michelle Torres Villanueva
91. Question
¿Cómo ordeno de manera
inversa en base al índice?
Programación para Internet
Lic. Nancy Michelle Torres Villanueva
92. Answer
Con la función krsort()
Programación para Internet
Lic. Nancy Michelle Torres Villanueva
93. Question
¿Cuál es la diferencia
entre la función
array_search() y
in_array()?
Programación para Internet
Lic. Nancy Michelle Torres Villanueva
94. Answer
La función array_search()
devuelve la posición, si no existe
devuelve falso.
La función in_array() solo dice si
existe o no o devueve resultado
booleano.
Programación para Internet
Lic. Nancy Michelle Torres Villanueva
95. Question
¿Cuáles son las maneras
de concatenar arreglos?
Programación para Internet
Lic. Nancy Michelle Torres Villanueva
96. Answer
Con + y merge
La diferencia de estos son la
manera de preservar la
información en caso de estar
repetida
Programación para Internet
Lic. Nancy Michelle Torres Villanueva
97. Question
¿Cómo invierto un
arreglo?
Programación para Internet
Lic. Nancy Michelle Torres Villanueva
98. Answer
Con la función array_reverse()
Programación para Internet
Lic. Nancy Michelle Torres Villanueva
99. Arreglos
PROGRAMACIÓN PARA INTERNET
● Los arreglos son los reyes indiscutibles de las
estructuras de datos avanzadas en PHP.
● Los arreglos en PHP son extremadamente flexibles,
permiten llaves numéricas de incremento automático,
llaves alfanuméricas o una mezcla de ambos, y son
capaces de almacenar casi cualquier valor, incluyendo
otros arreglos.
● Con más de setenta funciones para la manipulación
de ellos, los arreglos pueden hacer en la práctica
cualquier cosa que puedas imaginar y algo más.
Lic. Nancy Michelle Torres Villanueva 1
100. Arreglos...
PROGRAMACIÓN PARA INTERNET
● Todos los arreglos son colecciones ordenadas
de elementos, llamados elementos.
● Cada elemento tiene un valor, y es identificada
por una llave que es exclusiva del arreglo al
que pertenece.
● Las claves pueden ser números enteros o
cadenas.
Lic. Nancy Michelle Torres Villanueva 2
102. Acceso a los valores
PROGRAMACIÓN PARA INTERNET
Los valores contenidos en un arreglo se
pueden recuperar y modificar usando
corchetes [ ].
Lic. Nancy Michelle Torres Villanueva 4
103. PROGRAMACIÓN PARA INTERNET
● Siguiente llave numerica mas grande
$x[] = 10;
● Asignamos en que llave guardar
$x[’aa’] = 11;
● Imprimimos lo guardado en la llave 0, lo cual
será 10
echo $x[0];
Lic. Nancy Michelle Torres Villanueva 5
104. PROGRAMACIÓN PARA INTERNET
$newArray[0] = "PHP";
$newArray[1] = "MySQL";
$newArray[2] = "Apache";
● ¿Qué hace?
$newArray[2] = "Cherokee";
Lic. Nancy Michelle Torres Villanueva 6
105. PROGRAMACIÓN PARA INTERNET
$shopping = array( );
$shopping[] = "Leche";
$shopping[] = "Cafe";
$shopping[] = "Azucar";
● En que posiciones ha quedado cada elemento?
Lic. Nancy Michelle Torres Villanueva 7
106. PROGRAMACIÓN PARA INTERNET
$array = array(
"primero"=>1,
"segundo"=>2,
"tercero"=>3);
● Qué imprime?
print $array["segundo"];
Lic. Nancy Michelle Torres Villanueva 8
107. PROGRAMACIÓN PARA INTERNET
$numeros = array(
1=>"uno",
"dos",
"tres",
"cuatro");
● Cuál es la llave del item “tres”??
Lic. Nancy Michelle Torres Villanueva 9
108. PROGRAMACIÓN PARA INTERNET
$numeros = array(
1=>"uno",
3=>"tres",
5=>"cinco");
$numeros[]="otro";
● En que llave quedó el elemento “otro”?
Lic. Nancy Michelle Torres Villanueva 10
109. PROGRAMACIÓN PARA INTERNET
$a = array (
’4’ => 5,
’a’ => ’b’);
$a[] = 44;
● En qué llave quedará el item 44?
Lic. Nancy Michelle Torres Villanueva 11
110. PROGRAMACIÓN PARA INTERNET
$a = array (
’A’ => “Esta es una A”,
’B’ => “Esta es una B”);
$a[] = “Esta que será”;
● En qué llave quedará el item “Esta que será”?
Lic. Nancy Michelle Torres Villanueva 12
111. PROGRAMACIÓN PARA INTERNET
$numeros = array(1=>"uno", 3=>"tres",
5=>"cinco");
$numeros[2] = "dos";
$numeros[4] = "cuatro";
$numeros[6] = "seis";
● En que orden ha quedado el arreglo?
Lic. Nancy Michelle Torres Villanueva 13
112. PROGRAMACIÓN PARA INTERNET
● Se dice pues que las llaves son
automáticamente incrementales y siempre los
elementos se agregarán en el siguiente valor
mayor posible y al final del arreglo.
● Tenga en cuenta que las llaves diferencian
entre mayúsculas y minúsculas. Por lo tanto, la
llave "A" es diferente de 'a', pero las llaves '1' y
1 son los mismos.
Lic. Nancy Michelle Torres Villanueva 14
113. Impresión de arreglos
PROGRAMACIÓN PARA INTERNET
● PHP provee dos funciones para imprimir el
valor de una variable recursivamente:
● print_r()
● var_dump()
Lic. Nancy Michelle Torres Villanueva 15
114. print_r() y var_dump()
PROGRAMACIÓN PARA INTERNET
● var_dump() muestra además el tipo de dato
● var_dump() puede mostrar el valor de varias
variables al mismo tiempo
● print_r() puede regresar el valor como una
cadena
Lic. Nancy Michelle Torres Villanueva 16
115. Arreglos multidimensionales
PROGRAMACIÓN PARA INTERNET
● A menudo los datos no pueden ser
representados en un arreglo sencillo de escalar
en valores enteros, cadenas, booleanos, y
flotantes. Algunos datos sólo pueden estar
representados cuando los arreglos tienen otros
arreglos de valores.
Lic. Nancy Michelle Torres Villanueva 17
116. PROGRAMACIÓN PARA INTERNET
$array = array();
$array[] = array(
’tu’,
’yo’);
$array[] = array(
’el’,
’nos’);
echo $array[0][1] . $array[1][0];
● Qué imprime?
Lic. Nancy Michelle Torres Villanueva 18
119. Asignando a variables
PROGRAMACIÓN PARA INTERNET independientes
● A veces es más fácil trabajar con los valores de
un arreglo mediante la asignación a las
variables individuales. Si bien esto puede ser
logrado mediante la extracción de elementos
individuales y la asignación de cada uno de
ellos a una variable diferente, PHP ofrece un
acceso rápido.
Lic. Nancy Michelle Torres Villanueva 21
120. $info = array('café', 'color', 'cafeína');
● Todas las variables
PROGRAMACIÓN PARA INTERNET list($bebida, $color, $componente) = $info;
● Solo algunas variables
list($bebida, , $componente) = $info;
● Solo la tercera
list( , , $componente) = $info;
Lic. Nancy Michelle Torres Villanueva 22
121. Unión de arreglos
PROGRAMACIÓN PARA INTERNET
● Se logra con el operador +
● Los elementos con llaves repetidas solo se
muestran una vez, si el contenido es distinto,
esto representa perdida de información
Lic. Nancy Michelle Torres Villanueva 23
122. PROGRAMACIÓN PARA INTERNET
$a = array (1, 2, 3);
$b = array (’a’ => 1, ’b’ => 2, ’c’
=> 3);
$c = $a+$b;
● Cuál es el contenido de $c?
Lic. Nancy Michelle Torres Villanueva 24
123. PROGRAMACIÓN PARA INTERNET
$a = array (1, 2, 3);
$b = array (’a’ => 1, 2, 3);
$c = $a+$b;
● Cuál es el contenido de $c?
Lic. Nancy Michelle Torres Villanueva 25
124. PROGRAMACIÓN PARA INTERNET
$a = array ('a' => 1,
'b' => 2,
'c' => 3);
$b = array ('a' => 4,
'b' => 5,
'c' => 6);
$c = $a+$b;
● Cuál es el contenido de $c?
Lic. Nancy Michelle Torres Villanueva 26
125. PROGRAMACIÓN PARA INTERNET
$cosas = array("silla", "mesa",
"maleta", "caja");
$edificios = array("casa", "depa",
"palacio");
$partes = array("cabeza", "pies");
$agregados = $partes + $edificios +
$cosas;
● Cuál es el contenido de $agregados?
Lic. Nancy Michelle Torres Villanueva 27
126. Unión de arreglos sin perder
PROGRAMACIÓN PARA INTERNET elementos
● La funcion array_merge() concatena uno o
mas arreglos, agregandolos al final.
● Si los arreglos tienen llaves de cadenas
iguales, entonces el ultimo valor va a
sobrescribir por la vez previa en que aparecio
la llave.
Lic. Nancy Michelle Torres Villanueva 28
129. Operadores de comparación de
PROGRAMACIÓN PARA INTERNET arreglos
● ==
Mismo número de elementos con las mismas
llaves sin importar el orden.
● ===
Mismo par llave/valor en el mismo orden
Lic. Nancy Michelle Torres Villanueva 31
130. Tamaño de un arreglo
PROGRAMACIÓN PARA INTERNET
● El tamaño de un arreglo puede ser obtenido
con la función count().
● Funciona con cualquier variable, no
necesariamente arreglos, si se quiere asegurar
de que lo este usando en un arreglo, deberá
primero utilizar la función is_array()
Lic. Nancy Michelle Torres Villanueva 32
131. PROGRAMACIÓN PARA INTERNET
$a = array (1, 2, 4);
$b = array();
$c = 10;
echo count($a);
echo count($b);
if is_array($c)
echo count($c);
Lic. Nancy Michelle Torres Villanueva 33
132. Repeticiones de un elemento en
PROGRAMACIÓN PARA INTERNET el arreglo
● count() devuelve el total de elementos en un
arreglo, pero si se desea contar de manera
unica los elementos se utiliza
array_count_values().
● Devuelve un arreglo asociando cada elemento
con la cantidad de repeticiones.
Lic. Nancy Michelle Torres Villanueva 34
134. Determinar si un elemento en una
PROGRAMACIÓN PARA INTERNET posición dada existe
$a = array (’a’ => 1, ’b’ => 2);
echo isset ($a[’a’]);
echo isset ($a[’c’]);
$a = array (’a’ => NULL, ’b’ => 2);
echo isset ($a[’a’]);
● Qué impresiones se obtienen?
Lic. Nancy Michelle Torres Villanueva 36
135. Determinar si una llave existe
PROGRAMACIÓN PARA INTERNET
$a = array (’a’ => NULL, ’b’ => 2);
echo array_key_exists ('a',$a);
● Qué aparece en pantalla?
Lic. Nancy Michelle Torres Villanueva 37
136. Buscar si un elemento existe en
PROGRAMACIÓN PARA INTERNET el arreglo
$a = array (’a’ => NULL, ’b’ => 2);
echo in_array (2, $a);
● Qué aparece en pantalla?
● Se puede pasar un tercer parámetro para
obligar el tipo de dato.
Lic. Nancy Michelle Torres Villanueva 38
137. Obtener la posición de un
PROGRAMACIÓN PARA INTERNET elemento en el arreglo
● array_search() funciona igual que in_array()
solo que este devolverá la llave. Si el valor no
fue encontrado devuelve false.
● Tiene un tercer parámetro opcional para obligar
la concordancia del tipo de dato
$a = array (’a’ => NULL, ’b’ => 2);
echo array_search (2, $a);
● Qué aparece en pantalla?
Lic. Nancy Michelle Torres Villanueva 39
138. Un arreglo con las llaves
PROGRAMACIÓN PARA INTERNET
● Con array_keys() se obtiene un arreglo con las
llaves de otro arreglo.
● Se pueden poner parámetros opcionales y
entonces solo devolverá las llaves de los
elementos indicados en los parámetros.
Lic. Nancy Michelle Torres Villanueva 40
140. Un arreglo sin llaves
PROGRAMACIÓN PARA INTERNET
● La función array_values() genera un nuevo
arreglo solamente con los valores y olvida las
llaves
Lic. Nancy Michelle Torres Villanueva 42
141. Eliminación de elementos
PROGRAMACIÓN PARA INTERNET
● Un elemento puede ser eliminado de un
arreglo, o un arreglo completo se puede
eliminar llamando a unset ( ).
● Sin embargo, la eliminación de un elemento no
reasigna indices.
Lic. Nancy Michelle Torres Villanueva 43
142. PROGRAMACIÓN PARA INTERNET
$favoritos = array("PHP", "Ace",
"COBOL", "Java", "C++");
● Eliminar COBOL del arreglo
unset($favoritos[2]);
Lic. Nancy Michelle Torres Villanueva 44
143. Eliminando elementos repetidos
PROGRAMACIÓN PARA INTERNET
● La función array_unique() devuelve un arreglo
sin items repetidos.
● Si el arreglo tiene llaves, se quedará con la
primer llave, y las siguientes ocasiones en que
se repita, serán omitidas.
Lic. Nancy Michelle Torres Villanueva 45
144. Un arreglo rellenado
PROGRAMACIÓN PARA INTERNET
● La función array_fill() crea un arreglo rellenado
con el dato indicado.
● Se debe indicar la primer llave, la cantidad de
repeticiones y el dato a repetir.
$unidad = array_fill(2, 5, "uno");
Array ( [2] => uno [3] => uno [4] =>
uno [5] => uno [6] => uno )
Lic. Nancy Michelle Torres Villanueva 46
145. Arreglo con una serie
PROGRAMACIÓN PARA INTERNET
● La función range() crea un arreglo con una
serie dentro.
● Se debe indicar el primer valor y el último valor.
Puede indicarse como parámetro opcional el
tipo de incremento
$letras = range("a", "z", 5);
Array ( [0] => a [1] => f [2] => k
[3] => p [4] => u [5] => z )
Lic. Nancy Michelle Torres Villanueva 47
146. Invertir un llaves por valores
PROGRAMACIÓN PARA INTERNET
● La función array_flip() invierte las llaves por
los valores en un arreglo.
$a = array (’a’, ’b’, ’c’);
array_flip ($a);
["a"]=> 0 , ["b"]=> 1 , ["c"]=> 2)
Lic. Nancy Michelle Torres Villanueva 48
147. Invertir el orden de un arreglo
PROGRAMACIÓN PARA INTERNET
● La función array_reverse() invierte el orden de
los elementos de un arreglo.
$cont = array("cero", "uno", "dos",
"tres", "cuatro");
$inverso = array_reverse($cont);
Array ( [4] => cuatro [3] => tres [2]
=> dos [1] => uno [0] => cero )
Lic. Nancy Michelle Torres Villanueva 49
148. Convertir un arreglo en una
PROGRAMACIÓN PARA INTERNET cadena
● La función implode() regresa una cadena
creada por la union de cada uno de los
elementos en el arreglo, insertando una cadena
de unión entre cada elemento.
● join() es un alias de implode() y funciona
exactamente igual
$animales = array("canguro", "leon",
"jirafa”);
implode(", ", $animales);
Lic. Nancy Michelle Torres Villanueva 50
149. Convertir una cadena en un
PROGRAMACIÓN PARA INTERNET arreglo
● La función explode() regresa un arreglo de
cadenas creadas por la ruptura de una cierta
cadena en cada ocurrencia despues de un
separador dado
$palabras = explode(" ", "Ahora es el
momento");
print_r($palabras);
Array ( [0] => Ahora [1] => es [2] => el [3] =>
momento )
Lic. Nancy Michelle Torres Villanueva 51
150. Iteraciones en un arreglo
PROGRAMACIÓN PARA INTERNET
● Existen varias funciones para poder trabajar co
las iteraciones dentro de un arreglo
● reset() Reinicia el puntero del arreglo para poder
recorrerlo.
● prev() Recorre el puntero a la posición anterior
● next() Recorre el puntero a la siguiente posición
● current() Entrega el valor guardado en la posición
actual
● key() Devuelve la llave de la posición actual
● end() Mueve el puntero a la posición final
Lic. Nancy Michelle Torres Villanueva 52
151. $array = array(’foo’ => ’bar’, ’baz’,
’bat’ => 2);
PROGRAMACIÓN PARA INTERNET
function displayArray($array) {
reset($array);
while (key($array) !== null) {
echo key($array).": ".current($array);
next($array);
}
}
Lic. Nancy Michelle Torres Villanueva 53
152. foreach()
PROGRAMACIÓN PARA INTERNET
● Es una manera sencilla de recorrer una arreglo.
$array = array(’foo’, ’bar’, ’baz’);
foreach ($array as $key => $value) {
echo "$key: $value";
}
Lic. Nancy Michelle Torres Villanueva 54
153. Iteraciones con funciones
PROGRAMACIÓN PARA INTERNET
● array_walk()
Aplica una función definida por el usuario a cada
miembro de un arreglo.
● array_walk_recursive()
Aplica una función definida por el usuario
recursivamente a cada miembro de un arreglo.
Lic. Nancy Michelle Torres Villanueva 55
154. $frutas = array("d" => "limon", "a"
=> "naranja", "b" => "platano", "c"
=> "manzana");
PROGRAMACIÓN PARA INTERNET
function test_print($valor, $llave)
{
echo "$llave. $valor<br />n";
}
array_walk($frutas, 'test_print');
Lic. Nancy Michelle Torres Villanueva 56
155. $frutas = array("d" => "limon", "a"
=> "naranja", "b" => "platano", "c"
=> "manzana");
PROGRAMACIÓN PARA INTERNET
function test_alter(&$valor, $llave,
$prefix)
{
$valor = "$prefix: $valor";
}
array_walk($frutas,
'test_print','Fruta: ');
Lic. Nancy Michelle Torres Villanueva 57
156. $dulce = array('a' => 'manzana', 'b'
=> 'platano');
PROGRAMACIÓN PARA INTERNET $frutas = array('dulce' => $dulce,
'acido' => 'limon');
function test_print($valor, $llave)
{
echo "$llave tiene $valorn";
}
array_walk_recursive($frutas,
'test_print');
Lic. Nancy Michelle Torres Villanueva 58
157. Ordenar un arreglo
PROGRAMACIÓN PARA INTERNET
● Los elementos de un arreglo se ordenan
ascedente o descendentemente, sin embargo,
las llaves se perderan en el proceso.
● sort() Ascendentemente
● rsort() Descendentemente
● Se tiene un segundo parámetro opcional para
indicar si el ordenamiento será alfabético o
numérico
Lic. Nancy Michelle Torres Villanueva 59
158. Banderas de ordenamiento
PROGRAMACIÓN PARA INTERNET
● SORT_REGULAR – Compara items
normalmente (No cambia los tipos)
● SORT_NUMERIC – Compara items
numéricamente
● SORT_STRING – Compara items como
cadenas
● SORT_LOCALE_STRING – Compara items
como cadenas basado en la configuración local
Lic. Nancy Michelle Torres Villanueva 60
160. PROGRAMACIÓN PARA INTERNET
$arr = array ("1", 10, "Maria",
"maria", "Memo", 1, 5, 9);
sort($arr);
● En que orden quedará este arreglo?
Lic. Nancy Michelle Torres Villanueva 62
161. Ordenar un arreglo manteniendo
PROGRAMACIÓN PARA INTERNET las llaves
● Para que al ordenar las llaves se mantengan,
se utilizan las funciones:
● asort() Ascendentemente
● arsort() Descendentemente
Lic. Nancy Michelle Torres Villanueva 63
162. Ordenar un arreglo por sus llaves
PROGRAMACIÓN PARA INTERNET
● Hemos visto como ordenar un arreglo en base
a sus elementos, pero también podemos
ordenarlo en base a sus llaves.
● ksort() Ascendentemente
● krsort() Descendentemente
Lic. Nancy Michelle Torres Villanueva 64
163. Ordenar un arreglo utilizando una
PROGRAMACIÓN PARA INTERNET función definida por el usuario
● Si deseas ordenar un arreglo de alguna otra
manera que no sea numérica o
alfabéticamente, puedes crear tu propia función
y luego mandar a ordenar con esa función.
● usort( ) Ordena el arreglo basado en el valor de
cada elemento aplicando una nueva llave
● uasort( ) Mantiene el par llave/valor
● uksort( ) Reordena los elementos basado en la
llave de cada elemento
Lic. Nancy Michelle Torres Villanueva 65
164. function cmp_length($a, $b)
{
PROGRAMACIÓN PARA INTERNET if (strlen($a) < strlen($b))
return -1;
if (strlen($a) > strlen($b))
return 1;
//Si el tamaño es igual
return 0;
}
Lic. Nancy Michelle Torres Villanueva 66
166. Desordenando un arreglo
PROGRAMACIÓN PARA INTERNET
● La función shuffle() desacomoda un arreglo de
manera random. Las llaves se pierden
Lic. Nancy Michelle Torres Villanueva 68
167. Obtener un elemento random
PROGRAMACIÓN PARA INTERNET
● La función array_rand() toma uno o mas
elementos random del arreglo y devuelve la
llave de estos.
Lic. Nancy Michelle Torres Villanueva 69
168. Arreglos como pilas y colas
PROGRAMACIÓN PARA INTERNET
● PHP ofrece funciones para las actividades de
push y pull en las pilas y para shift y unshift en
las colas.
● array_push
● array_pop
● array_shift
● array_unshift
Lic. Nancy Michelle Torres Villanueva 70
169. PROGRAMACIÓN PARA INTERNET
$stack = array();
array_push($stack, ’bar’, ’baz’);
$last_in = array_pop($stack);
$queue = array(’qux’, ’bar’, ’baz’);
$first_element = array_shift($queue);
array_unshift($queue, ’foo’);
Lic. Nancy Michelle Torres Villanueva 71
170. Diferencia entre dos arreglos
PROGRAMACIÓN PARA INTERNET
● La función array_diff() compara dos arreglos y
devuelve la diferencia.
● Devuelve un arreglo con todas las entradas del
arreglo1 que no estan en los demás arreglos.
● No toma en cuenta las llaves, de modo que si
se desea tomar en cuenta las llaves, se utiliza
array_diff_assoc()
Lic. Nancy Michelle Torres Villanueva 72
171. Diferencia entre dos arreglos en
PROGRAMACIÓN PARA INTERNET base a sus llaves
● Para buscar las diferencias entre dos arreglos
tomando en cuenta las llaves se utiliza la
función array_diff_key()
● En ambas funciones se puede utilizar una
función definida por el usuario y las funciones a
utilizar son array_diff_uassoc() y
array_diff_ukey()
Lic. Nancy Michelle Torres Villanueva 73
172. Intersección de dos arreglos
PROGRAMACIÓN PARA INTERNET
● La función array_intersect() devuelve todos
los elementos del arreglo1 que existen en los
demás arreglos.
● Si se desea revisar también las llaves se utiliza
la función array_intersect_assoc().
● array_intersect_key() se utiliza para validar
las llaves.
● array_intersect_ukey() y
array_intersect_uassoc() para validar con una
función
● Lic. Nancy Michelle Torres Villanueva 74