Foros del Web » Programando para Internet » PHP »

Foreach Range

Estas en el tema de Foreach Range en el foro de PHP en Foros del Web. hola estoy usando este codigo Código PHP: <?php   foreach( range ( 0 ,  10 ) as  $numero ) {     echo  $numero ;   }   ?> para que me ...
  #1 (permalink)  
Antiguo 17/07/2013, 06:26
 
Fecha de Ingreso: enero-2012
Mensajes: 224
Antigüedad: 12 años, 10 meses
Puntos: 1
Foreach Range

hola estoy usando este codigo

Código PHP:

<?php  
foreach(range(010) as $numero) {  
  echo 
$numero;  
}  
?>
para que me muestre todos los numeros que hay en ese rango pero quiero que me los devuelva por separado, y no uno al lado del otro como puedo hacer? gracias
  #2 (permalink)  
Antiguo 17/07/2013, 06:31
 
Fecha de Ingreso: enero-2012
Mensajes: 224
Antigüedad: 12 años, 10 meses
Puntos: 1
Respuesta: Foreach Range

supongo que con un explode deberia funcionar
  #3 (permalink)  
Antiguo 17/07/2013, 06:33
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 7 meses
Puntos: 292
Respuesta: Foreach Range

Cita:
Iniciado por mktalternativa Ver Mensaje
supongo que con un explode deberia funcionar
Explode() es para strings... tu estas operando sobre enteros
__________________
Salu2!
  #4 (permalink)  
Antiguo 17/07/2013, 06:35
 
Fecha de Ingreso: enero-2012
Mensajes: 224
Antigüedad: 12 años, 10 meses
Puntos: 1
Respuesta: Foreach Range

<?php
foreach(range(0, 10 as $numero) {
echo $numero;

}



$pieces = explode("", $numero);

echo $pieces[0]; // piece1
'<br>'
echo $pieces[1]; // piece2
?>





probe asi pero no funciono
  #5 (permalink)  
Antiguo 17/07/2013, 06:35
 
Fecha de Ingreso: enero-2012
Mensajes: 224
Antigüedad: 12 años, 10 meses
Puntos: 1
Respuesta: Foreach Range

gracias italico que sugieres
  #6 (permalink)  
Antiguo 17/07/2013, 06:37
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 7 meses
Puntos: 292
Respuesta: Foreach Range

pero ajustando:

Código PHP:
Ver original
  1. <?php
  2.  
  3. $numeros = null;
  4. foreach(range(0, 10) as $numero) {  
  5.   $numeros .= $numero. '<br/>';  
  6. }  
  7.  
  8. echo $numeros;

Para evitar el ultimo "separador" .. en tu caso el <br/> final sino lo quieres debes detenerte justo antes:

Código PHP:
Ver original
  1. <?php
  2.  
  3. $numeros = null;
  4. foreach(range(0, 9) as $numero) {  
  5.   $numeros .= $numero. '<br/>';  
  6. }  
  7.  
  8. $numeros .= '10';
  9.  
  10. echo $numeros;
__________________
Salu2!
  #7 (permalink)  
Antiguo 17/07/2013, 06:40
 
Fecha de Ingreso: enero-2012
Mensajes: 224
Antigüedad: 12 años, 10 meses
Puntos: 1
Respuesta: Foreach Range

Muy bueno no conocia esta posibildad pero me acabo de dar cuenta que necesito que se cnovierta en un array para poder interactuar con los numeros por separado
  #8 (permalink)  
Antiguo 17/07/2013, 06:46
 
Fecha de Ingreso: enero-2012
Mensajes: 224
Antigüedad: 12 años, 10 meses
Puntos: 1
Respuesta: Foreach Range

puedo suplantar el br por una coma y de ahi crear el array?
  #9 (permalink)  
Antiguo 17/07/2013, 07:10
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 7 meses
Puntos: 292
Respuesta: Foreach Range

Quiero aclararte que lamentablemente no funciona range ('0','10') y en el codigo que expuse lo que use fue la conversion dinamica de tipos porque la salida son enteros. Una pena.

Otra solucion seria que implementes tu propia funcion range() mediante "SOBRECARGA"

Código PHP:
Ver original
  1. <?php
  2. Namespace MathTools;
  3.  
  4. define ('__AUTO__',0);
  5. define ('__STRING__',2);
  6. define ('__INT__',1);
  7.  
  8. // Mejorada por Italico
  9. function range ($a,$b,$step=1,$type = __AUTO__ ){
  10.     $out = \range ($a,$b,$step);
  11.    
  12.     if (is_numeric($a) && is_numeric($b) && $type== __STRING__ ){        
  13.         $out2 = array(); //empty
  14.         foreach ($out as $n)
  15.             $out2[] = (string) $n;
  16.  
  17.         return $out2;
  18.     }
  19.      
  20.     return $out;  
  21.    
  22. }
  23.  
  24. $numeros = range(0, 10,1,__STRING__);
  25. echo implode (',',$numeros);

Tienes una version mejorada de range()

PD: al implode() le puedes pasar el separador que quieras...
__________________
Salu2!
  #10 (permalink)  
Antiguo 17/07/2013, 07:18
 
Fecha de Ingreso: enero-2012
Mensajes: 224
Antigüedad: 12 años, 10 meses
Puntos: 1
Respuesta: Foreach Range

resulto ser un poco mas complejo yo crei que con esto ya podria armar el array

Código PHP:

$numeros 
null;
foreach(
range($row_escuelas['mesadesde'], $row_escuelas['mesahasta']) as $numero) {  
$numeros .= $numero',';   
}   
 
$final rtrim($numeros);


$array = array($final); 
  #11 (permalink)  
Antiguo 17/07/2013, 07:22
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 7 meses
Puntos: 292
Respuesta: Foreach Range

No veo la complejidad...

Código PHP:
Ver original
  1. <?php
  2.  
  3. $row_escuelas['mesadesde'] = 2;
  4. $row_escuelas['mesahasta'] = 25;
  5.  
  6. $numeros = null;
  7. foreach(range($row_escuelas['mesadesde'], $row_escuelas['mesahasta']-1) as $numero) {  
  8. $numeros .= $numero. ' ,';    
  9. }    
  10. $numeros .= $numero;    
  11.  
  12.  
  13. echo $numeros;
  14. // salida:  2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,10 ,11 ,12 ,13 ,14 ,15 ,16 ,17 ,18 ,19 ,20 ,21 ,22 ,23 ,24 ,24

El rtrim() te serviria si el separador fuera espacio (' ') ya que logras sacar facil el ultimo agregado en el ultimo ciclado del forech. rtrim() remueve espacios a derecha en un string

PERO... con la funcion mejorada que te digo todo se resume ... ten en cuenta lo primero es solo la funcion... y eso puede estar en un archivo a parte!

Código PHP:
Ver original
  1. <?php
  2. Namespace MathTools;
  3.  
  4. define ('__AUTO__',0);
  5. define ('__STRING__',2);
  6. define ('__INT__',1);
  7.  
  8. function range ($a,$b,$step=1,$type = __AUTO__ ){
  9.     $out = \range ($a,$b,$step);
  10.    
  11.     if (is_numeric($a) && is_numeric($b) && $type== __STRING__ ){        
  12.         $out2 = array(); //empty
  13.         foreach ($out as $n)
  14.             $out2[] = (string) $n;
  15.  
  16.         return $out2;
  17.     }
  18.      
  19.     return $out;  
  20.    
  21. }
  22.  
  23. // ACA empieza el verdadero programa... lo otro podria ser una libreria en un archivo aparte
  24.  
  25. $row_escuelas['mesadesde'] = 2;
  26. $row_escuelas['mesahasta'] = 25;
  27.  
  28. $numeros = range($row_escuelas['mesadesde'], $row_escuelas['mesahasta'],1,__STRING__);
  29.  
  30. echo implode (' ,',$numeros);


// salida: 2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,10 ,11 ,12 ,13 ,14 ,15 ,16 ,17 ,18 ,19 ,20 ,21 ,22 ,23 ,24 ,24
__________________
Salu2!

Última edición por Italico76; 17/07/2013 a las 07:27
  #12 (permalink)  
Antiguo 17/07/2013, 07:29
 
Fecha de Ingreso: enero-2012
Mensajes: 224
Antigüedad: 12 años, 10 meses
Puntos: 1
Respuesta: Foreach Range

Italico Relamente debo agradecerte tu tiempo en responder ha sido de gran ayuda! queria hacerte una ultima pregunta y ya daria por finalizado

como puedo hacer para que me muestre un link por cada numero y luego tomar ese numero por url o alguna forma desde la otra pagina ejemplo

link.php?numero=1
link.php?numero=2
link.php?numero=3
link.php?numero=4
  #13 (permalink)  
Antiguo 17/07/2013, 07:35
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 7 meses
Puntos: 292
Respuesta: Foreach Range

Código PHP:
Ver original
  1. <?php
  2. ...
  3. // Genero enlaces:
  4. foreach (range(1,5) $ n){
  5.      echo "<a href=\"link.php?numero=$n\">Pagina $n</a>";
  6. }
Código PHP:
Ver original
  1. // en Link.php  (otra pagina)
  2. <?php
  3. $enlace = (isset($_GET['numero'] ? $_GET['numero'] : null);
  4.  
  5. echo $enlace; // aca ya tienes el numero enviado

----------

OTRA SOLUCION... seria crear el "tipo rango" que pues puedes ir mejorando con agregados.. te muestro como funcionaria:

Código PHP:
Ver original
  1. <?php
  2. include "range_lib.php";
  3.  
  4. $rango = new Range(1,10);
  5.  
  6. foreach ($rango as $valor){
  7.     echo "$valor<br/>";
  8. }
  9.  
  10. // Salida: 1<br/>2<br/>3<br/>4<br/>5<br/>6<br/>7<br/>8<br/>9<br/>10<br/>
  11.  
  12. echo $rango;   // salida:  1 2 3 4 5 6 7 8 9 10
  13. echo str_replace (' ',' ,',$rango);    // salida:  1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,10


Código PHP:
Ver original
  1. <?php
  2. // Esta clase estaria en RANGE_LIB.PHP
  3.  
  4. Class Range implements Iterator {
  5.  
  6.     private $_arr = [];
  7.     private $_ini  = null;
  8.     private $_end  = null;
  9.     private $_step = null;
  10.  
  11.     public function __construct($a,$b,$step=null){        
  12.         $this->_ini  = $a;
  13.         $this->_end  = $b;
  14.         $this->_step = ($step == null ? 1 : $step);
  15.         $this->_arr  = range($this->_ini,$this->_end,$this->_step);
  16.     }
  17.  
  18.     public function getArray(){
  19.         return $this->_arr;
  20.     }
  21.  
  22.     public function __toString(){        
  23.         $out = null;
  24.  
  25.         foreach ($this->_arr as $val)
  26.             $out .= "$val ";
  27.      
  28.         return rtrim($out);
  29.            
  30.     }
  31.  
  32.     /* Implemento interface Iterator  */
  33.  
  34.     public function rewind()
  35.     {        
  36.         reset($this->_arr);
  37.     }
  38.  
  39.     public function current()
  40.     {
  41.         $elem = current($this->_arr);        
  42.         return $elem;
  43.     }
  44.  
  45.     public function next()
  46.     {
  47.         $elem = next($this->_arr);        
  48.         return $elem;
  49.     }
  50.      
  51.     public function key()
  52.     {    
  53.         $key = key($this->_arr);
  54.         return $key;
  55.     }
  56.  
  57.     public function valid()
  58.     {
  59.         $key = key($this->_arr);
  60.         $elem = ($key !== NULL && $key !== FALSE);        
  61.         return $elem;
  62.     }  
  63.  
  64. } // endClass
__________________
Salu2!

Última edición por Italico76; 17/07/2013 a las 14:07

Etiquetas: foreach, range
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 10:26.