Foros del Web » Programando para Internet » PHP »

Duda Arrays

Estas en el tema de Duda Arrays en el foro de PHP en Foros del Web. Hola a todos, queria plantearos una gran duda que me surgio hace unos dias pero no se como resolver: Teniendo un array de arrays, ¿como ...
  #1 (permalink)  
Antiguo 22/09/2011, 15:07
 
Fecha de Ingreso: septiembre-2011
Mensajes: 2
Antigüedad: 13 años, 1 mes
Puntos: 1
Pregunta Duda Arrays

Hola a todos, queria plantearos una gran duda que me surgio hace unos dias pero no se como resolver:


Teniendo un array de arrays, ¿como podria generar todas las combinaciones posibles?


Ejem:
array(
"1" =>array(A,B),
"2" => array(C,D),
"3" => array(EF)
)

Gracias
  #2 (permalink)  
Antiguo 22/09/2011, 16:57
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 16 años, 3 meses
Puntos: 2237
Respuesta: Duda Arrays

Vuelta a la izquierda hasta llegar a la A, vuelta a la derecha hasta llegar a la F, nuevamente izquiera, hasta B... y al final, tiras de la palanca y se abrira la caja!

Ups... de que combinaciones hablas?
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 22/09/2011, 17:12
 
Fecha de Ingreso: septiembre-2011
Mensajes: 2
Antigüedad: 13 años, 1 mes
Puntos: 1
Respuesta: Duda Arrays

Ace, acf, bce,bcf... Bdf
  #4 (permalink)  
Antiguo 22/09/2011, 19:53
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 13 años, 4 meses
Puntos: 793
Respuesta: Duda Arrays

Cita:
Iniciado por Triby Ver Mensaje
Vuelta a la izquierda hasta llegar a la A, vuelta a la derecha hasta llegar a la F, nuevamente izquiera, hasta B... y al final, tiras de la palanca y se abrira la caja!

Ups... de que combinaciones hablas?
jajajajajaja

Según el ejemplo que pusiste en el primer mensaje, creo que esto es lo que quieres. Espero haber anidado correctamente los bucles. Da más de 17 mil combinaciones. Si no es así por lo menos te da una idea. Saludos.

Código PHP:
Ver original
  1. <?php
  2. $arr = array(); //Array de combinaciones
  3. $letras = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r',
  4. 's', 't', 'u', 'v', 'w', 'x', 'y', 'z');
  5.  
  6. foreach ($letras as $l) {
  7.     $letra1 = $l;
  8.     foreach ($letras as $l2) {
  9.         $letra2 = $l2;
  10.         foreach ($letras as $l3) {
  11.             $letra3 = $l3;
  12.             $arr[] = array($l,$l2,$l3);
  13.         }
  14.     }
  15. }
  16.  
  17. echo '<pre>';
  18. print_r($arr);
  19. echo '</pre>';
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #5 (permalink)  
Antiguo 23/09/2011, 05:43
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: Duda Arrays

Cita:
Iniciado por andresdzphp Ver Mensaje
Según el ejemplo que pusiste en el primer mensaje, creo que esto es lo que quieres. Espero haber anidado correctamente los bucles. Da más de 17 mil combinaciones. Si no es así por lo menos te da una idea. Saludos.

Código PHP:
Ver original
  1. <?php
  2. $arr = array(); //Array de combinaciones
  3. $letras = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r',
  4. 's', 't', 'u', 'v', 'w', 'x', 'y', 'z');
  5.  
  6. foreach ($letras as $l) {
  7.     $letra1 = $l;
  8.     foreach ($letras as $l2) {
  9.         $letra2 = $l2;
  10.         foreach ($letras as $l3) {
  11.             $letra3 = $l3;
  12.             $arr[] = array($l,$l2,$l3);
  13.         }
  14.     }
  15. }
  16.  
  17. echo '<pre>';
  18. print_r($arr);
  19. echo '</pre>';
Pero es multidimensional No sé si esto fue lo que hiciste pero se supone que debe ser algo como
Código PHP:
Ver original
  1. $arr = array(
  2.     array('a', 'b', 'c'),
  3.     array('d', 'e', 'f'),
  4.     array('g', 'h', 'i'),
  5. );
y de ahí hacer las combinaciones. Aunque yo lo que haría es unir los array y luego hacer las combinaciones algo similar a lo que hiciste.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #6 (permalink)  
Antiguo 23/09/2011, 08:57
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 13 años, 4 meses
Puntos: 793
Respuesta: Duda Arrays

abimaelrc el array que colocaste y lo que yo hice da exactamente el mismo resultado. si te fijas en esta línea.

Código PHP:
Ver original
  1. $arr[] = array($l,$l2,$l3);

Array
(
[0] => Array
(
[0] => a
[1] => a
[2] => a
)

[...]

da la misma estructura que:

Código PHP:
Ver original
  1. $arr = array(
  2.     array('a', 'b', 'c'),
  3.     array('d', 'e', 'f'),
  4.     array('g', 'h', 'i'),
  5. );

Array
(
[0] => Array
(
[0] => a
[1] => b
[2] => c
)

[...]

Estoy seguro que hay mejores formas de hacerlo. Saludos
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #7 (permalink)  
Antiguo 23/09/2011, 09:07
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: Duda Arrays

Por eso dije No sé si esto fue lo que hiciste
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #8 (permalink)  
Antiguo 23/09/2011, 10:26
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 13 años, 4 meses
Puntos: 793
Respuesta: Duda Arrays

Me encontré esta función que da el mismo resultado, pero más "elegante":

Código PHP:
Ver original
  1. <?php
  2. function array_cartesian() {
  3.     $_ = func_get_args();
  4.     if (count($_) == 0)
  5.         return array(array());
  6.     $a = array_shift($_);
  7.     $c = call_user_func_array(__FUNCTION__, $_);
  8.     $r = array();
  9.     foreach ($a as $v)
  10.         foreach ($c as $p)
  11.             $r[] = array_merge(array($v), $p);
  12.     return $r;
  13. }
  14.  
  15. function abecedario() {
  16.     return array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
  17.     'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w',
  18.     'x', 'y', 'z');
  19. }
  20.  
  21. $cross = array_cartesian(abecedario(),abecedario(),abecedario());
  22.  
  23. echo '<pre>';
  24. print_r($cross);
  25. echo '</pre>';

Fuente
http://www.php.net/manual/en/ref.array.php#54979
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP

Última edición por andresdzphp; 23/09/2011 a las 11:09 Razón: ortografía...

Etiquetas: arrays
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 06:00.