Foros del Web » Programando para Internet » PHP »

Bucle while dentro de otro while solo se ejecuta una vez

Estas en el tema de Bucle while dentro de otro while solo se ejecuta una vez en el foro de PHP en Foros del Web. Hola buenas tardes.. Tengo un WHILE dentro de otro WHILE, este segundo WHILE solo se me ejecuta una vez, mientras que el primero, tantas como ...
  #1 (permalink)  
Antiguo 24/03/2020, 11:08
 
Fecha de Ingreso: octubre-2007
Mensajes: 53
Antigüedad: 17 años
Puntos: 0
Busqueda Bucle while dentro de otro while solo se ejecuta una vez

Hola buenas tardes..

Tengo un WHILE dentro de otro WHILE, este segundo WHILE solo se me ejecuta una vez, mientras que el primero, tantas como sea necesario.

Un ejemplo:

Código PHP:
        $count 0;
        
$loop 0;
        while(
$line fgets($lista)){
                
$field[$count] = explode (';'$line);
                while(
$line2 fgets($fp)){
                        
$field2[$loop] = explode (','$line2);
                        if(
substr_compare($field2[$loop][0], "10.80.8"06) === 0)
                        {
                                if(
strcmp($field[$count][0], $field2[$loop][1]) === 0)
                                {
                                        echo 
$field[$count][0] ."---"$field2[$loop][0] ."\n";
                                        break;
                                }
                        }
                }
        } 
La idea es leer un archivo línea a línea para recorrerlo "$lista".
Cada línea debe recorrer a su vez otro archivo de texto "$fp", para comparar valores.

Es decir en $lista tengo:

uno;si
dos;no

Y en $fp:

uno,10.80.80.1
dos,10.80.80.2

La idea es cruzarlos de tal modo que teníendo en nombre "uno" de $lista, que me de "10.80.80.1" de $fp.

Me imagino que lo estaré haciendo mal...

Como debería de hacerlo? Que tengo mal?

Muchas gracias
  #2 (permalink)  
Antiguo 24/03/2020, 12:02
 
Fecha de Ingreso: abril-2006
Mensajes: 583
Antigüedad: 18 años, 7 meses
Puntos: 120
Respuesta: Bucle while dentro de otro while solo se ejecuta una vez

mi estimado, la forma en la que quieres hacer el codigo es muy PRO, por asi decirlo, cuando se empieza en php hazlo paso a paso, aunque gastes mas recursos de SISTEMA, cuando tu proyecto sea mas robusto y necesitas ahorrar recursos, recien compacta tu codigo como ahora.

bueno primero necesitas crear un Diccionario con una LLAVE unica

uno;si
dos;no

seria como

Código PHP:
Ver original
  1. $archivo1 = array(
  2. 'uno'=>'SI',
  3. 'dos'=>'NO',
  4. );

al tener un diccionario ,tabla,array, como gustes llamarlo.

recorre el otro archivo y compara la LLAVE ,y obten el valor

en la documentacion de PHP hay funciones muchas, que pueden adaptarse mejor a tu proyecto por ejemplo para trabajar con archivos con SALTOS de LINEA
usa la funcion FILE, en lugar de fgets y fopen
Código PHP:
Ver original
  1. $filas = file('tu_archivo_.txt');//retornara un Array con cada fila del archivo
  2. foreach($filas as $linea){
  3.     //para mas seguridad puedes limpiar la $linea
  4.    $linea=trim($linea);//quitamos Tabulaciones ,retornos de carro, al principio y final
  5.    if($linea ==''){ continue;}//Ignoramos saltos de linea en blanco o sin informacion
  6.  
  7. }


asi que la sugerencia es que , primero, generes tu diccionario en PHP reemplazando asi tu Primer WHILE

y luego en vez de tu segundo WHILE, otro foreach, pero esta vez, compara usando isset($lista['LLAVE']) para obtener datos de tu diccionario

en si, necesitarias usar las funciones,

file,isset,foreach,trim,explode, substr_compare, strcmp

mira en la web oficial de PHP el uso de cada una para que te des una idea mejor, revisando sus ejemplos

http://es.php.net/file
http://es.php.net/foreach
http://es.php.net/explode

http://es.php.net/NOMBRE_DE_CLASE_O_FUNCION
__________________
Mis aportes te ayudaron??, te hicieron ahorrar valiosos tiempo??, si quieres puedes agradecerme con un Gracias o con una donacion
https://paypal.com/pools/c/8lmNLmWnG9

Etiquetas: bucle, ejecuta, vez
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 12:06.