1
+ <?php
2
+ /**
3
+ * TEORÍA: Conjuntos en PHP
4
+ *
5
+ * En PHP, no existe una estructura de datos específica para conjuntos como en otros lenguajes.
6
+ * Sin embargo, podemos simular conjuntos usando arrays y algunas funciones específicas:
7
+ *
8
+ * 1. array_unique() - Para eliminar duplicados
9
+ * 2. array_values() - Para reindexar arrays después de operaciones
10
+ * 3. array_intersect() - Para intersección
11
+ * 4. array_diff() - Para diferencia
12
+ * 5. array_merge() - Para unión
13
+ *
14
+ * También usaremos la clase SplObjectStorage para demostrar una implementación
15
+ * más orientada a objetos cuando sea necesario.
16
+ */
17
+
18
+ class ConjuntosEjemplo {
19
+ private $ conjunto ;
20
+
21
+ public function __construct () {
22
+ $ this ->conjunto = [];
23
+ }
24
+
25
+ /**
26
+ * Muestra el contenido actual del conjunto
27
+ */
28
+ public function mostrarConjunto ($ mensaje = "Conjunto actual " ) {
29
+ echo "$ mensaje: [ " . implode (", " , $ this ->conjunto ) . "] \n" ;
30
+ }
31
+
32
+ /**
33
+ * 1. Añade un elemento al final
34
+ */
35
+ public function agregarAlFinal ($ elemento ) {
36
+ $ this ->conjunto [] = $ elemento ;
37
+ $ this ->conjunto = array_values (array_unique ($ this ->conjunto ));
38
+ $ this ->mostrarConjunto ("Después de añadir ' $ elemento' al final " );
39
+ }
40
+
41
+ /**
42
+ * 2. Añade un elemento al principio
43
+ */
44
+ public function agregarAlPrincipio ($ elemento ) {
45
+ array_unshift ($ this ->conjunto , $ elemento );
46
+ $ this ->conjunto = array_values (array_unique ($ this ->conjunto ));
47
+ $ this ->mostrarConjunto ("Después de añadir ' $ elemento' al principio " );
48
+ }
49
+
50
+ /**
51
+ * 3. Añade varios elementos en bloque al final
52
+ */
53
+ public function agregarVariosAlFinal ($ elementos ) {
54
+ $ this ->conjunto = array_values (array_unique (array_merge ($ this ->conjunto , $ elementos )));
55
+ $ this ->mostrarConjunto ("Después de añadir varios elementos al final " );
56
+ }
57
+
58
+ /**
59
+ * 4. Añade varios elementos en bloque en una posición concreta
60
+ */
61
+ public function agregarVariosEnPosicion ($ elementos , $ posicion ) {
62
+ $ primera_parte = array_slice ($ this ->conjunto , 0 , $ posicion );
63
+ $ segunda_parte = array_slice ($ this ->conjunto , $ posicion );
64
+ $ this ->conjunto = array_values (array_unique (array_merge ($ primera_parte , $ elementos , $ segunda_parte )));
65
+ $ this ->mostrarConjunto ("Después de añadir varios elementos en posición $ posicion " );
66
+ }
67
+
68
+ /**
69
+ * 5. Elimina un elemento en una posición concreta
70
+ */
71
+ public function eliminarEnPosicion ($ posicion ) {
72
+ if (isset ($ this ->conjunto [$ posicion ])) {
73
+ $ elemento = $ this ->conjunto [$ posicion ];
74
+ unset($ this ->conjunto [$ posicion ]);
75
+ $ this ->conjunto = array_values ($ this ->conjunto );
76
+ $ this ->mostrarConjunto ("Después de eliminar elemento en posición $ posicion " );
77
+ }
78
+ }
79
+
80
+ /**
81
+ * 6. Actualiza el valor de un elemento en una posición concreta
82
+ */
83
+ public function actualizarEnPosicion ($ posicion , $ nuevoValor ) {
84
+ if (isset ($ this ->conjunto [$ posicion ])) {
85
+ $ this ->conjunto [$ posicion ] = $ nuevoValor ;
86
+ $ this ->conjunto = array_values (array_unique ($ this ->conjunto ));
87
+ $ this ->mostrarConjunto ("Después de actualizar elemento en posición $ posicion " );
88
+ }
89
+ }
90
+
91
+ /**
92
+ * 7. Comprueba si un elemento está en el conjunto
93
+ */
94
+ public function contiene ($ elemento ) {
95
+ $ resultado = in_array ($ elemento , $ this ->conjunto );
96
+ echo "¿El conjunto contiene ' $ elemento'? " . ($ resultado ? "Sí " : "No " ) . "\n" ;
97
+ return $ resultado ;
98
+ }
99
+
100
+ /**
101
+ * 8. Elimina todo el contenido del conjunto
102
+ */
103
+ public function limpiar () {
104
+ $ this ->conjunto = [];
105
+ $ this ->mostrarConjunto ("Después de limpiar el conjunto " );
106
+ }
107
+
108
+ /**
109
+ * Obtiene el conjunto actual
110
+ */
111
+ public function obtenerConjunto () {
112
+ return $ this ->conjunto ;
113
+ }
114
+ }
115
+
116
+ /**
117
+ * Clase para operaciones extra con conjuntos
118
+ */
119
+ class OperacionesExtra {
120
+ /**
121
+ * Unión de dos conjuntos
122
+ */
123
+ public static function union ($ conjunto1 , $ conjunto2 ) {
124
+ return array_values (array_unique (array_merge ($ conjunto1 , $ conjunto2 )));
125
+ }
126
+
127
+ /**
128
+ * Intersección de dos conjuntos
129
+ */
130
+ public static function interseccion ($ conjunto1 , $ conjunto2 ) {
131
+ return array_values (array_intersect ($ conjunto1 , $ conjunto2 ));
132
+ }
133
+
134
+ /**
135
+ * Diferencia de dos conjuntos
136
+ */
137
+ public static function diferencia ($ conjunto1 , $ conjunto2 ) {
138
+ return array_values (array_diff ($ conjunto1 , $ conjunto2 ));
139
+ }
140
+
141
+ /**
142
+ * Diferencia simétrica de dos conjuntos
143
+ */
144
+ public static function diferenciaSimetrica ($ conjunto1 , $ conjunto2 ) {
145
+ $ diff1 = array_diff ($ conjunto1 , $ conjunto2 );
146
+ $ diff2 = array_diff ($ conjunto2 , $ conjunto1 );
147
+ return array_values (array_merge ($ diff1 , $ diff2 ));
148
+ }
149
+ }
150
+
151
+ // Demostración de uso
152
+ echo "PARTE 1: OPERACIONES BÁSICAS \n" ;
153
+ $ demo = new ConjuntosEjemplo ();
154
+
155
+ $ demo ->agregarAlFinal ("Elemento1 " );
156
+ $ demo ->agregarAlPrincipio ("Elemento2 " );
157
+ $ demo ->agregarVariosAlFinal (["Elemento3 " , "Elemento4 " , "Elemento5 " ]);
158
+ $ demo ->agregarVariosEnPosicion (["ElementoA " , "ElementoB " ], 2 );
159
+ $ demo ->eliminarEnPosicion (3 );
160
+ $ demo ->actualizarEnPosicion (1 , "ElementoActualizado " );
161
+ $ demo ->contiene ("Elemento1 " );
162
+ $ demo ->limpiar ();
163
+
164
+ echo "\nPARTE 2: OPERACIONES EXTRA \n" ;
165
+ $ conjunto1 = [1 , 2 , 3 , 4 , 5 ];
166
+ $ conjunto2 = [4 , 5 , 6 , 7 , 8 ];
167
+
168
+ echo "Conjunto 1: [ " . implode (", " , $ conjunto1 ) . "] \n" ;
169
+ echo "Conjunto 2: [ " . implode (", " , $ conjunto2 ) . "] \n" ;
170
+
171
+ $ union = OperacionesExtra::union ($ conjunto1 , $ conjunto2 );
172
+ echo "Unión: [ " . implode (", " , $ union ) . "] \n" ;
173
+
174
+ $ interseccion = OperacionesExtra::interseccion ($ conjunto1 , $ conjunto2 );
175
+ echo "Intersección: [ " . implode (", " , $ interseccion ) . "] \n" ;
176
+
177
+ $ diferencia = OperacionesExtra::diferencia ($ conjunto1 , $ conjunto2 );
178
+ echo "Diferencia (conjunto1 - conjunto2): [ " . implode (", " , $ diferencia ) . "] \n" ;
179
+
180
+ $ diferenciaSimetrica = OperacionesExtra::diferenciaSimetrica ($ conjunto1 , $ conjunto2 );
181
+ echo "Diferencia simétrica: [ " . implode (", " , $ diferenciaSimetrica ) . "] \n" ;
182
+ ?>
0 commit comments