Skip to content

Commit 402d5c1

Browse files
committed
#17 - php
1 parent 246f26b commit 402d5c1

File tree

1 file changed

+169
-0
lines changed

1 file changed

+169
-0
lines changed
Lines changed: 169 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,169 @@
1+
<?php
2+
/**
3+
* Demostración de diferentes mecanismos de iteración en PHP
4+
*
5+
* PHP ofrece múltiples formas de realizar iteraciones, cada una
6+
* con sus propias características y casos de uso específicos.
7+
*/
8+
9+
echo "=== Demostración de Mecanismos de Iteración en PHP ===\n\n";
10+
11+
// 1. Bucle for tradicional
12+
echo "1. Usando bucle for tradicional:\n";
13+
/*
14+
* El bucle for es uno de los más comunes y versátiles.
15+
* Sintaxis: for (inicialización; condición; incremento)
16+
*/
17+
for ($i = 1; $i <= 10; $i++) {
18+
echo $i . " ";
19+
}
20+
echo "\n\n";
21+
22+
// 2. Bucle while
23+
echo "2. Usando bucle while:\n";
24+
/*
25+
* El bucle while se ejecuta mientras una condición sea verdadera.
26+
* Es útil cuando no sabemos exactamente cuántas iteraciones necesitamos.
27+
*/
28+
$contador = 1;
29+
while ($contador <= 10) {
30+
echo $contador . " ";
31+
$contador++;
32+
}
33+
echo "\n\n";
34+
35+
// 3. Bucle do-while
36+
echo "3. Usando bucle do-while:\n";
37+
/*
38+
* Similar al while, pero garantiza que el código se ejecute al menos una vez
39+
* ya que la condición se evalúa al final de cada iteración.
40+
*/
41+
$num = 1;
42+
do {
43+
echo $num . " ";
44+
$num++;
45+
} while ($num <= 10);
46+
echo "\n\n";
47+
48+
// EXTRA: Más mecanismos de iteración
49+
50+
// 4. foreach con array
51+
echo "4. Usando foreach con array:\n";
52+
/*
53+
* foreach es especialmente útil para iterar sobre arrays y objetos.
54+
* Es muy legible y evita tener que manejar índices manualmente.
55+
*/
56+
$numeros = range(1, 10);
57+
foreach ($numeros as $numero) {
58+
echo $numero . " ";
59+
}
60+
echo "\n\n";
61+
62+
// 5. array_map
63+
echo "5. Usando array_map:\n";
64+
/*
65+
* array_map aplica una función a cada elemento de un array.
66+
* Es útil para transformar datos de forma funcional.
67+
*/
68+
$resultado = array_map(function($n) {
69+
echo $n . " ";
70+
return $n;
71+
}, range(1, 10));
72+
echo "\n\n";
73+
74+
// 6. array_walk
75+
echo "6. Usando array_walk:\n";
76+
/*
77+
* array_walk es similar a array_map, pero modifica el array original
78+
* y permite pasar parámetros adicionales a la función de callback.
79+
*/
80+
array_walk($numeros, function($valor) {
81+
echo $valor . " ";
82+
});
83+
echo "\n\n";
84+
85+
// 7. Iterator
86+
echo "7. Usando Iterator:\n";
87+
/*
88+
* PHP proporciona varias clases de iterador para manejar colecciones
89+
* de manera más orientada a objetos.
90+
*/
91+
$arrayIterator = new ArrayIterator($numeros);
92+
while ($arrayIterator->valid()) {
93+
echo $arrayIterator->current() . " ";
94+
$arrayIterator->next();
95+
}
96+
echo "\n\n";
97+
98+
// 8. Generator
99+
echo "8. Usando Generator:\n";
100+
/*
101+
* Los generadores permiten crear iteradores de forma simple y eficiente
102+
* sin necesidad de implementar la interfaz completa de Iterator.
103+
*/
104+
function generarNumeros() {
105+
for ($i = 1; $i <= 10; $i++) {
106+
yield $i;
107+
}
108+
}
109+
110+
foreach (generarNumeros() as $numero) {
111+
echo $numero . " ";
112+
}
113+
echo "\n\n";
114+
115+
// 9. array_reduce
116+
echo "9. Usando array_reduce:\n";
117+
/*
118+
* Aunque array_reduce se usa principalmente para reducir un array a un solo valor,
119+
* también puede usarse para iterar realizando una acción en cada paso.
120+
*/
121+
array_reduce($numeros, function($carry, $item) {
122+
echo $item . " ";
123+
return $carry;
124+
});
125+
echo "\n\n";
126+
127+
// 10. SPL DirectoryIterator (ejemplo con números)
128+
echo "10. Usando SPL DirectoryIterator (simulado con números):\n";
129+
/*
130+
* PHP proporciona iteradores especializados para diferentes propósitos.
131+
* Aquí simulamos uno similar a DirectoryIterator pero con números.
132+
*/
133+
class NumberIterator implements Iterator {
134+
private $position = 0;
135+
private $array = [];
136+
137+
public function __construct() {
138+
$this->array = range(1, 10);
139+
}
140+
141+
public function rewind() {
142+
$this->position = 0;
143+
}
144+
145+
public function current() {
146+
return $this->array[$this->position];
147+
}
148+
149+
public function key() {
150+
return $this->position;
151+
}
152+
153+
public function next() {
154+
++$this->position;
155+
}
156+
157+
public function valid() {
158+
return isset($this->array[$this->position]);
159+
}
160+
}
161+
162+
$numberIterator = new NumberIterator();
163+
foreach ($numberIterator as $number) {
164+
echo $number . " ";
165+
}
166+
echo "\n\n";
167+
168+
echo "=== Fin de la demostración ===\n";
169+
?>

0 commit comments

Comments
 (0)