Foros del Web » Programando para Internet » PHP »

Error con bucle y array()

Estas en el tema de Error con bucle y array() en el foro de PHP en Foros del Web. ¡Buenas! Espero que puedan ayudarme. Tengo el siguiente código: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código PHP: Ver original preg_match_all ( $regex , $this -> _source , $matches ) ...
  #1 (permalink)  
Antiguo 30/04/2012, 09:38
Avatar de Karmac  
Fecha de Ingreso: agosto-2011
Ubicación: Bilbao
Mensajes: 196
Antigüedad: 12 años, 8 meses
Puntos: 34
Pregunta Error con bucle y array()

¡Buenas! Espero que puedan ayudarme. Tengo el siguiente código:

Código PHP:
Ver original
  1. preg_match_all( $regex, $this->_source, $matches );
  2. foreach ( $matches[7] as $k => $v )
  3. {
  4.     $fleet = new CR_Model_Fleet();
  5.    
  6.     $fleet->setPlayer( $matches[2][$k] );
  7.            
  8.     $names = preg_split( '#[\s]{2,}#', trim( $matches[7][$k] ) );
  9.     $numbers = preg_split( '#[\s]{2,}#', trim( $matches[8][$k] ) );
  10.    
  11.     foreach ( $names as $key => $value )
  12.     {
  13.         $fleet->addShip( $this->_createShip( $value, $this->_convertToInt( $numbers[$key] ) ) );
  14.             }
  15.    
  16.     if ( strtolower( $matches[1][$k] ) == 'atacante' )
  17.         $round->addAttackingFleet( $fleet );
  18.     else
  19.         $round->addDefendingFleet( $fleet );
  20. }

Hasta aquí bien, el problema es que ese array() parece ser infinito porque el código no termina de ejecutarse no se por qué. Antes usaba un bucle while y preg_match(), pero lo cambié por sí funcionaba con foreach() y preg_match_all() pero nada.

$matches contiene lo siguiente:

Código Texto Plano:
Ver original
  1. Array
  2. (
  3.     [0] => Array
  4.         (
  5.             [0] => Atacante D Hawkmoon [8:353:5] Armamento: 150% Escudos: 140% Cascos: 160%
  6. Tipo    Est.Muerte
  7. Cantidad    16
  8.  
  9.             [1] => Defensor donosti NO OFICIALES [8:350:4] Armamento: 170% Escudos: 160% Cascos: 160%
  10. Tipo    Misil   Láser Peq.  Láser Gr.   C.Gauss     C.Plasma    Cúpula Gr.
  11. Cantidad    3.808   312     68  29  20  1
  12.  
  13.         )
  14.  
  15.     [1] => Array
  16.         (
  17.             [0] => Atacante
  18.             [1] => Defensor
  19.         )
  20.  
  21.     [2] => Array
  22.         (
  23.             [0] => D Hawkmoon
  24.             [1] => donosti NO OFICIALES
  25.         )
  26.  
  27.     [3] => Array
  28.         (
  29.             [0] => [8:353:5]
  30.             [1] => [8:350:4]
  31.         )
  32.  
  33.     [4] => Array
  34.         (
  35.             [0] => 150%
  36.             [1] => 170%
  37.         )
  38.  
  39.     [5] => Array
  40.         (
  41.             [0] => 140%
  42.             [1] => 160%
  43.         )
  44.  
  45.     [6] => Array
  46.         (
  47.             [0] => 160%
  48.             [1] => 160%
  49.         )
  50.  
  51.     [7] => Array
  52.         (
  53.             [0] => Est.Muerte
  54.  
  55.             [1] => Misil    Láser Peq.  Láser Gr.   C.Gauss     C.Plasma    Cúpula Gr.
  56.  
  57.         )
  58.  
  59.     [8] => Array
  60.         (
  61.             [0] => 16
  62.  
  63.             [1] => 3.808    312     68  29  20  1
  64.  
  65.         )
  66.  
  67. )

Espero que puedan resolver el bucle infinito que se me crea. Saludos y muchas gracias.
  #2 (permalink)  
Antiguo 30/04/2012, 10:10
Avatar de santris  
Fecha de Ingreso: agosto-2009
Ubicación: Sant Feliu de Llobregat
Mensajes: 955
Antigüedad: 14 años, 8 meses
Puntos: 66
Respuesta: Error con bucle y array()

El array lo has de montar como lo tienes puesto??

Yo lo he probado de la forma normal y funciona:

Código PHP:
$matches =    
array(
          
=> array
            (
                
=> "Atacante D Hawkmoon [8:353:5] Armamento: 150% Escudos: 140% Cascos: 160%
    Tipo    Est.Muerte
    Cantidad    16"
,
     
                
=> "Defensor donosti NO OFICIALES [8:350:4] Armamento: 170% Escudos: 160% Cascos: 160%
    Tipo    Misil   Láser Peq.  Láser Gr.   C.Gauss     C.Plasma    Cúpula Gr.
    Cantidad    3.808   312     68  29  20  1"
     
            
),
     
        
=> array
            (
                
=> "Atacante",
                
=> "Defensor"
            
),
     
        
=> array
            (
                
=> "D Hawkmoon",
                
=> "donosti NO OFICIALES"
            
)
     
);
$i=0;
foreach(
$matches as $valor){
    echo 
$valor[0]."<br />";
    echo 
$valor[1]."<br />";

saludos,
__________________
Tu álbum de cromos online!!
  #3 (permalink)  
Antiguo 30/04/2012, 10:24
Avatar de Karmac  
Fecha de Ingreso: agosto-2011
Ubicación: Bilbao
Mensajes: 196
Antigüedad: 12 años, 8 meses
Puntos: 34
Respuesta: Error con bucle y array()

Si, la estructura de como tiene que estar montado está bien, pero no se por que se peta.
Quito el código de dentro del foreach y sigue sin funcionar.
Se lo que devuelve preg_match y es exactamente eso, nada largo, asi que no se que sera.

Gracias por la ayuda.

Última edición por Karmac; 01/05/2012 a las 02:29
  #4 (permalink)  
Antiguo 01/05/2012, 02:31
Avatar de Karmac  
Fecha de Ingreso: agosto-2011
Ubicación: Bilbao
Mensajes: 196
Antigüedad: 12 años, 8 meses
Puntos: 34
Respuesta: Error con bucle y array()

Pongo el código original a continuación, el que no da error. Al cambiar la expresion regular funciona bien, lo que pasa es que tuve que editarlo porque no selecciona bien los datos.
Código PHP:
Ver original
  1. $regex = '.*?(Attacker|Defender) ([^\n\r]*?)(\s*?\[([0-9]:[0-9]{1,3}:[0-9]{1,2})\])?'
  2.                . '(\s*?Weapons: ([0-9]{0,2})0% Shields: ([0-9]{0,2})0% Armour: ([0-9]{0,2})0%)?\s*'
  3.                . '(Type([A-Za-z.-\s]*)\s*' . 'Total([0-9.\s]*).*?Weapons' . '|destroyed.)\s*'
  4.                . '.*?(?=Attacker|Defender)';

Y esta la expresion regular de antes que se me olvido ponerla.

Código PHP:
Ver original
  1. $regex  = '#'
  2.                 . '(Atacante|Defensor) ([a-zA-Z0-1\s]*) (\[[0-9]:[0-9]{1,3}:[0-9]{1,2}\]) '
  3.                 . 'Armamento: ([0-9]{0,2}0%) Escudos: ([0-9]{0,2}0%) Cascos: ([0-9]{0,2}0%)\s'
  4.                 . 'Tipo\s*([a-zA-Záéíóú.\s]*)\s*Cantidad\s*([0-9.\s]*)'
  5.                 . '#';

El error tiene que ser ahí porque ahora me pone que se me ha agotado el limite en la línea del preg_match_all(). Soy nuevo con las expresiones regulares y posiblemente haya puesto algo más. De todos modos es extraño porque cuando pongo un die() en cualquier parte del script si que funciona.

Saludos.

EDIT: Me da error ahora, pero en una línea que está comentada. Además la memoria que intenta asignar es mucho menor que el límite.

Cita:
Fatal Error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 3883 bytes) in /path/ on line 140

Última edición por Karmac; 01/05/2012 a las 02:50

Etiquetas: bucle
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




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