Foros del Web » Programando para Internet » PHP »

Loop con array

Estas en el tema de Loop con array en el foro de PHP en Foros del Web. Hola, Tengo un archivo.log con varias lineas con esta info: 103.239.234.105 -- [2007-04-01 00:42:21] "GET articles/learn_PHP_basics HTTP/1.0" 200 12729 "Mozilla/4.0" Necesito saber cuantas requests fueron ...
  #1 (permalink)  
Antiguo 16/06/2015, 06:21
 
Fecha de Ingreso: marzo-2015
Mensajes: 15
Antigüedad: 9 años, 7 meses
Puntos: 0
Loop con array

Hola,
Tengo un archivo.log con varias lineas con esta info:
103.239.234.105 -- [2007-04-01 00:42:21] "GET articles/learn_PHP_basics HTTP/1.0" 200 12729 "Mozilla/4.0"

Necesito saber cuantas requests fueron hechas desde "articles directory"

Lo he convertido en un array y este es el resultado:

Array ( [0] => 103.239.234.105 -- [2007-04-01 00:42:21] [1] => GET articles/learn_PHP_basics HTTP/1.0 [2] => 200 12729 [3] => Mozilla/4.0 [4] => )

Pero ahora no sé como hacer el loop para que mire todas las líneas, y cuales de ellas son requests desde "article directory".

Gracias
  #2 (permalink)  
Antiguo 16/06/2015, 06:37
Avatar de ArturoGallegos
Moderador
 
Fecha de Ingreso: febrero-2008
Ubicación: Morelia, México
Mensajes: 6.774
Antigüedad: 16 años, 8 meses
Puntos: 1146
Respuesta: Loop con array

hay varias funciones, como in_array, array_search y array_keys

Yo te recomendaría esta ultima, para mi gusto la mas fácil y rápida de implementar.
  #3 (permalink)  
Antiguo 16/06/2015, 06:38
 
Fecha de Ingreso: mayo-2013
Mensajes: 191
Antigüedad: 11 años, 6 meses
Puntos: 10
Respuesta: Loop con array

Supongando que tu array se llama $mi_array;
simplemente haces un bucle for

Código PHP:
Ver original
  1. for($i=0;$i < count($mi_array);$i++){
  2.     //haz lo que quieres con este elemento del array
  3.     //por ejemplo:
  4.     echo $mi_array[$i]."<br>";
  5. //o bien
  6.     if($mi_array[$i] === "GET articles/learn_PHP_basics HTTP/1.0"){
  7.         //manda dos cervezas a la mesa cuatro :))))
  8.     }else{
  9.         //bar cerrado :(
  10.     }
  11. }

Última edición por matake; 16/06/2015 a las 07:08
  #4 (permalink)  
Antiguo 16/06/2015, 07:28
Avatar de ArturoGallegos
Moderador
 
Fecha de Ingreso: febrero-2008
Ubicación: Morelia, México
Mensajes: 6.774
Antigüedad: 16 años, 8 meses
Puntos: 1146
Respuesta: Loop con array

hay te va otra función que se me había olvidado, con la que seguro encuentras tu respuesta en una sola linea
http://php.net/manual/en/function.preg-grep.php
  #5 (permalink)  
Antiguo 16/06/2015, 07:48
 
Fecha de Ingreso: marzo-2015
Mensajes: 15
Antigüedad: 9 años, 7 meses
Puntos: 0
Respuesta: Loop con array

Gracias

Tengo esto
Código PHP:
            while (!feof($handle)) {
            
            
$input '103.239.234.105 -- [2007-04-01 00:42:21] "GET articles/learn_PHP_basics HTTP/1.0" 200 12729 "Mozilla/4.0"';
            
$directory explode ('"',$input);
            
print_r  ($directory);
            
$articles 0;

            
            if(
array_key_exists("GET articles/learn_PHP_basics HTTP/1.0",$directory)){
                for(
$article=0;Sarticle count ($directory);$article++){
                    echo 
"<p>Total number of file requests from the articles directory: $article</p>";
                    }
                }
            } 
Pero en vez de un número, me sale la misma linea repetida mil veces
Sé que parecen preguntas tontas, pero estoy empezando a programar y aún no lo entiendo bien
  #6 (permalink)  
Antiguo 16/06/2015, 08:40
 
Fecha de Ingreso: mayo-2013
Mensajes: 191
Antigüedad: 11 años, 6 meses
Puntos: 10
Respuesta: Loop con array

En este caso has cambiado tu pregunta inicial.
Ahora dices que te interesa el numero de veces que coincide dicho patron en tu array

De todos modos era mal escrito
Esto deberia funcionar:
Código PHP:
Ver original
  1. while (!feof($handle)) {   
  2.     $input = fgets($handle);
  3.     $directory = explode ('"',$input);
  4.     print_r  ($directory);
  5.     $article = 0;
  6.     for($i=0;$i < count ($directory);$i++){
  7.     if($directory[$i] === "GET articles/learn_PHP_basics HTTP/1.0"){
  8.             $article++;
  9.         }
  10.     }
  11.     echo "<p>Total number of file requests from the articles directory: $article</p>";
  12. }

o la version mas corta como dijo ArturoGallegos seria esto

Código PHP:
Ver original
  1. while (!feof($handle)) {
  2.    
  3.     $input = fgets($handle);
  4.     $directory = explode ('"',$input);
  5.     print_r  ($directory);
  6.     $article = 0;
  7.     $article = count(preg_grep( "GET articles/learn_PHP_basics HTTP/1.0",$directory ));
  8.     echo "<p>Total number of file requests from the articles directory: $article</p>";
  9. }

No entiendo porque pusiste manualmente el
Código PHP:
Ver original
  1. $input = '103.239.234.105 -- [2007-04-01 00:42:21] "GET articles/learn_PHP_basics HTTP/1.0" 200 12729 "Mozilla/4.0"';

cuando $input se supone que debe ser una linea leida de tu fichero con while por esto puse el fgets()
pero en este caso ni siquiera deberias hacerlo array con el explode y simplemente hacer
Código PHP:
Ver original
  1. while (!feof($handle)) {
  2.     $input = fgets($handle);
  3.     $article = preg_match_all("GET articles/learn_PHP_basics HTTP/1.0",$input);
  4.     echo "<p>Total number of file requests from the articles directory: $article</p>";
  5. }

Pero todo de mas arriba te va a dar el Total de coincidencias en esta linea leida
Si lo que quieres es el total de todo el fichero es otra cosa

Última edición por matake; 16/06/2015 a las 09:03
  #7 (permalink)  
Antiguo 16/06/2015, 09:06
 
Fecha de Ingreso: marzo-2015
Mensajes: 15
Antigüedad: 9 años, 7 meses
Puntos: 0
Respuesta: Loop con array

Porque no tengo ni idea :( y pensaba que trabajando con array sería más fácil manipular los datos.
He probado tu última sugerencia y me pone que "preg_match_all() expects at least 3 parameters"
De todas maneras muchas gracias por tus respuestas

Si, busco el total del fichero no de cada linea, por eso lo del array, para poder contar eso, y luego por otra parte sumar el ancho de banda total consumido, los errores.....
  #8 (permalink)  
Antiguo 16/06/2015, 09:18
 
Fecha de Ingreso: mayo-2013
Mensajes: 191
Antigüedad: 11 años, 6 meses
Puntos: 10
Respuesta: Loop con array

Entonces una opcion seria esto

Código PHP:
Ver original
  1. $article = 0; // sacas esta variable del while
  2. while (!feof($handle)) {    
  3.     $input = fgets($handle);
  4.     $directory = explode ('"',$input);    
  5.     for($i=0;$i < count ($directory);$i++){
  6.     if($directory[$i] === "GET articles/learn_PHP_basics HTTP/1.0"){
  7.             $article++;
  8.         }
  9.     }
  10.    
  11. }
  12. //sacas esto tambien y lo pones despues del while ... asi te dara el Total General
  13.  echo "<p>Total number of file requests from the articles directory: $article</p>";

Aunque lo de preg_match seria mas indicada y mas corta es tambien mas complicada si no dominas expresiones regulares

Ojo ! para que te funcione se supone que la variable $handle que tienes en la condicion while , contiene dicho fichero .log que mencionaste al principio

Última edición por matake; 16/06/2015 a las 09:31
  #9 (permalink)  
Antiguo 16/06/2015, 09:34
 
Fecha de Ingreso: marzo-2015
Mensajes: 15
Antigüedad: 9 años, 7 meses
Puntos: 0
Respuesta: Loop con array

Si funciona, muchas gracias y si, tengo el fichero abierto y dentro de $hancdle.
Muchas gracias de verdad, tengo que entregar un trabajo en una hora y me has salvado :)
Me queda mucho que aprender y aunque cuando leo los conceptos los entiendo, a la hora de aplicarlos me vuelvo loca :S
  #10 (permalink)  
Antiguo 16/06/2015, 09:42
 
Fecha de Ingreso: mayo-2013
Mensajes: 191
Antigüedad: 11 años, 6 meses
Puntos: 10
Respuesta: Loop con array

Código PHP:
Ver original
  1. echo "Las gracias han sido bien recibidas a la mesa cuatro";
  #11 (permalink)  
Antiguo 16/06/2015, 11:10
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años, 6 meses
Puntos: 320
Respuesta: Loop con array

Les gusta rascarse la oreja derecha con la mano izquierda eh?

Código PHP:
Ver original
  1. <?php
  2.     echo "Total de requests: ".substr_count(file_get_contents("archivo.log"), "GET articles/learn_PHP_basics HTTP/1.0");
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #12 (permalink)  
Antiguo 16/06/2015, 12:02
 
Fecha de Ingreso: mayo-2013
Mensajes: 191
Antigüedad: 11 años, 6 meses
Puntos: 10
Respuesta: Loop con array

Cita:
echo "Total de requests: ".substr_count(file_get_contents("archivo.log" ), "GET articles/learn_PHP_basics HTTP/1.0");
Ja ja ... muy bueno esto con una solo linea (y lo del rascado )

Lo que pasa es que al principio pregunto por como hacer un loop con array y luego salio con un codigo mal escrito ... yo intente hacer que funcione este trozo de codigo.

Efectivamente lo que pusiste tu es el equivalente del E=MC² en la fisica

Etiquetas: loop
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 08:39.