[PHP] Insertar codigo HTML cada x cantidad de elementos de un array

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • CcCamikaze
    Langosta espía
    • 28-04-2003
    • 45790

    #1

    [PHP] Insertar codigo HTML cada x cantidad de elementos de un array

    Buenas


    tengo que hacer una pelotudez que no me sale.

    tengo un array, por ejemplo:

    $array = array(0,1,2,3,4,5,6,7,8,9);

    necesito recorrer ese array y que cada 4 elementos del array me inserte un <li></li>.


    o sea deberia quedar esto:

    <li>
    0
    1
    2
    3
    </li>
    <li>
    4
    5
    6
    7
    </li>
    <li>
    8
    9
    </li>



    buena data de parte de lux:




    SOLUCIONADO:

    el mas optimo (igual te deja un li extra, cuando lo tenga lo actualizo)

    Código:
    $news_array = array(1,2,3,4,5,6,7,8,9);
    
    echo ('<li>');
    foreach ($news_array as $key => $item) { 
    	echo $item . (((($key+1)%4)==0) ? '</li><li>' : '');
    }
    echo ('</li>');



    no es el metodo mas optimo pero igual hace lo mismo que el anterior.

    Código:
    
    $news_array = array();
    $indice = 0;
    
    //vuelco toda la data en un array
    while($saco_new_show = mysql_fetch_array($busk_new_show)){
    		$news_array[$indice] = array();
    		$news_array[$indice]['nombre'] = $saco_new_show['nombre'];
    		$indice++;
    }
    
    
    
    
    $i = 0;
    $z = 0;
    //saco el count del for asi no vuelve a contar los elementos del array y se optimiza la consulta de datos
    $icount = count($news_array);
    
    for ($i=0;$i < $icount;$i++){
    
    
    
    		switch($z){
    			case "0":
    				echo "<li>".$news_array[$i]['nombre']."<br/>";
    				$z++;
    			break;
    			
    			case "1":
    				echo $news_array[$i]['nombre']."<br/>";
    				$z++;
    			break;
    		
    			case "2":
    				echo $news_array[$i]['nombre']."<br/>";
    				$z++;
    			break;
    			
    			case "3":
    				echo $news_array[$i]['nombre']."</li>";
    				$z = 0;
    			break;
    		}
    }
    Editado por última vez por CcCamikaze; 16-02-2013, 03:23 PM.
  • Lux
    ルクス
    • 24-04-2003
    • 24465

    #2
    hmm, se me ocurre una negrada tipo poner un if dentro y al principio del ciclo que recorre el array y muestra cada elemento del mismo y al final de esa función y un contador (n=1; //y no 0),
    que como condición sea que si n%4sea(modulo) =0, muestra los <li>, sino, no.

    o sea
    Código:
    creas array;
    cargas array;
    tamaño array; // guardas el tamaño del array
    
    for (i=0, n=1; i<tamaño array; i++, n++)
    {
      if (n%4 = 0) then
        { echo '<li>'; }
      echo array[i];
      if (n%4 = 0) then
        { echo '</li>'; }
    }
    edit: uy dios, son un cancer los colores del tag php con fondo negro.
    Editado por última vez por Lux; 15-02-2013, 10:13 PM.

    Comentario

    • CcCamikaze
      Langosta espía
      • 28-04-2003
      • 45790

      #3
      ahi lo solucione con PaP


      Código:
      
      $i = 0;
      $z = 0;
      for ($i=0;$i<count($news_array);$i++){
      
      
      
      		switch($z){
      			case "0":
      				echo "<li>".$news_array[$i]['nombre']."<br/>";
      				$z++;
      			break;
      			
      			case "1":
      				echo $news_array[$i]['nombre']."<br/>";
      				$z++;
      			break;
      		
      			case "2":
      				echo $news_array[$i]['nombre']."<br/>";
      				$z++;
      			break;
      			
      			case "3":
      				echo $news_array[$i]['nombre']."</li>";
      				$z = 0;
      			break;
      		}
      }
      Editado por última vez por CcCamikaze; 15-02-2013, 10:45 PM.

      Comentario

      • Caquín
        Iorio
        • 26-02-2012
        • 4663

        #4
        NO SE PHP

        pero en el if no va el == en vez de un = solo?
        Mientras tenga la salud para poder destruirla al otro día, estoy muy contento. Es el rock

        Señorita mire lo que esta haciendo Iorio! esta dibujando una guitarra

        Comentario

        • Kabronero
          Giunta, Giunta, Giunta...
          • 14-04-2003
          • 46114

          #5
          pero ahí no estás cerrando el LI

          yo haría algo así:

          Código:
          <?php 
          
          $array = array(0,1,2,3,4,5,6,7,8,9,10,11,12);
          
          for($i = 0; $i <= count($array); $i++){
          	
          	if ($i % 4 == 0){
          		
          		if($i > 0){
          			echo "</li>";
          		}
          		
          		echo "<li>";
          		echo $array[$i];
          
          	}else if ($i == count($array)){
          		echo "</li>";
          	}else{
          		echo $array[$i];
          
          	}
          	
          }
          
          ?>

          si la longitud total del array % 4 es 0 te va a crear un <li></li> vacío al final jauja pero bue no es tan grave n
          Every year of your life seems shorter than the previous one since each passing year represents smaller and smaller portions of your life. It's the same reason a gift of a thousand bucks would be huge news to you, but meaningless to Bill Gates.

          Comentario

          • CcCamikaze
            Langosta espía
            • 28-04-2003
            • 45790

            #6
            Originalmente publicado por Kabronero
            pero ahí no estás cerrando el LI

            yo haría algo así:

            Código:
            <?php 
            
            $array = array(0,1,2,3,4,5,6,7,8,9,10,11,12);
            
            for($i = 0; $i <= count($array); $i++){
            	
            	if ($i % 4 == 0){
            		
            		if($i > 0){
            			echo "</li>";
            		}
            		
            		echo "<li>";
            		echo $array[$i];
            
            	}else if ($i == count($array)){
            		echo "</li>";
            	}else{
            		echo $array[$i];
            
            	}
            	
            }
            
            ?>

            si la longitud del array tiene módulo 0 te va a crear un <li></li> vacío al final jauja pero bue no es tan grave n
            si, me habia olvidado de updatear lo que modifique.

            xD

            ahi lo corregi en el post. lo pongo en el primero.
            Editado por última vez por CcCamikaze; 15-02-2013, 10:47 PM.

            Comentario

            • Kabronero
              Giunta, Giunta, Giunta...
              • 14-04-2003
              • 46114

              #7
              ah re que sí cerrás el li
              vi mal sh
              Every year of your life seems shorter than the previous one since each passing year represents smaller and smaller portions of your life. It's the same reason a gift of a thousand bucks would be huge news to you, but meaningless to Bill Gates.

              Comentario

              • Kabronero
                Giunta, Giunta, Giunta...
                • 14-04-2003
                • 46114

                #8
                ah JAUj bue, lo editaste QUE TRAMPOSO n
                Every year of your life seems shorter than the previous one since each passing year represents smaller and smaller portions of your life. It's the same reason a gift of a thousand bucks would be huge news to you, but meaningless to Bill Gates.

                Comentario

                • MoaLaiSkirulais
                  ^^(V)^^
                  • 08-07-2003
                  • 23268

                  #9
                  algo asi sin probar
                  Código PHP:
                  foreach ($items as $key => $item) {
                      echo "<li>" * ((4 % $key)==0);
                      echo $item;
                      echo "</li>" * ((4 % $key)==0);
                  } 
                  
                  igual seguro se puede en 2 lineas "bien"

                  Comentario

                  • Lux
                    ルクス
                    • 24-04-2003
                    • 24465

                    #10
                    Originalmente publicado por CcCamikaze
                    ahi lo solucione con PaP


                    Código:
                    
                    $i = 0;
                    $z = 0;
                    for ($i=0;$i<count($news_array);$i++){
                    
                    
                    
                    		switch($z){
                    			case "0":
                    				echo "<li>".$news_array[$i]['nombre']."<br/>";
                    				$z++;
                    			break;
                    			
                    			case "1":
                    				echo $news_array[$i]['nombre']."<br/>";
                    				$z++;
                    			break;
                    		
                    			case "2":
                    				echo $news_array[$i]['nombre']."<br/>";
                    				$z++;
                    			break;
                    			
                    			case "3":
                    				echo $news_array[$i]['nombre']."<br/>";
                    				$z = 0;
                    			break;
                    		}
                    }
                    soy ultra newbie, perdón, pero...
                    no es mucho menos económico este código?

                    por un lado tenés el count dentro del for mejores métodos para recorrer un array.

                    igual en mi código falló algo. no contempla el último <li> en caso de que el último item del array tenga índice que no sea múltiplo de 4.

                    se podría corregir así.
                    Código:
                    creas array;
                    cargas array;
                    tamaño array; // guardas el tamaño del array
                    
                    for (i=0, n=1; i<tamaño array; i++, n++) //si los tiene que mostrar cada 4, entonces lo forzás a que los imprima cada 4 items segun recorre el array
                    {
                      if (n%4 = 0) //modulo, es multiplo de...
                        { echo '<li>'; } 
                      echo array[i]; //mostras el elemento i del array
                      if (n%4 = 0) { 
                        echo '</li>'; 
                      }
                      else {
                        if (n-1=tamaño array) { //chequea si es el ultimo item, impar de la lista
                          echo '</li>'; }
                      }
                    }
                    ni idea la sintaxis php jeje y horrible la tabulacion
                    Editado por última vez por Lux; 15-02-2013, 11:25 PM.

                    Comentario

                    • Kabronero
                      Giunta, Giunta, Giunta...
                      • 14-04-2003
                      • 46114

                      #11
                      che lux pero lo tuyo resultaría en algo así (si fuera un array de numeritos como puso cami en el primer post)

                      012<li>3</li>456<li>7</li>8910<li>11</li>12...

                      el array empieza en cero (o sea posición 0) y vos estás sacando los múltiplos de 4 con una variable "n" que empieza en 1
                      mientras al mismo tiempo usás OTRA variable (i) para mostrar el elemento del array, varíable que sí empieza en 0... con lo cual estás "agarrando"/separando de a 3 elementos en vez de 4 ehg y ponés entre LIs sólo los valores del array cuya posición sea anterior a un múltiplo de 4 (!!)


                      pero igual, aunque empezaras en 0 y mostraras el valor del array "correcto", con tu código ahí estarías encerrando entre <li> sólo los valores múltiplos de 4... los demás valores te quedan en el limbo
                      o sea, te quedaría tipo <li>0</li>123<li>4</li>567<li>8</li>...


                      "n" es una variable mega redundante, fijate que existe nada más para sea siempre "i" + 1, pero después cuando abajo la usás le restás ese 1 jauaj
                      y tenés 2 if iguales medio sin sentido bueg
                      Every year of your life seems shorter than the previous one since each passing year represents smaller and smaller portions of your life. It's the same reason a gift of a thousand bucks would be huge news to you, but meaningless to Bill Gates.

                      Comentario

                      • CcCamikaze
                        Langosta espía
                        • 28-04-2003
                        • 45790

                        #12
                        optimizando codigo gracias a MoaLaiSkirulais

                        Código:
                        $news_array = array(1,2,3,4,5,6,7,8,9);
                        
                        echo ('<li>');
                        foreach ($news_array as $key => $item) { 
                        	echo $item . (((($key+1)%4)==0) ? '</li><li>' : '');
                        }
                        echo ('</li>');

                        Comentario

                        • CcCamikaze
                          Langosta espía
                          • 28-04-2003
                          • 45790

                          #13
                          dedicado a M@C:

                          .
                          .
                          .
                          camilo says:
                          a que llamas lotes?

                          -=== diablo =- says:
                          eso es lo biueno
                          lotes tipo repositor de coto
                          agarra caja pone caja
                          osea re bot
                          nada de infintos if y mierda tarantino
                          if : ?
                          punto

                          camilo says:
                          claro, booleando true or false

                          -=== diablo =- says:
                          osea esa parte del code no e importa a nadie
                          esta bien q no robe camara
                          en el trid te decian cosas re LOTR
                          casi arman un acelerador de particulas

                          camilo says:
                          juajaujauja de one

                          -=== diablo =- says:

                          Comentario

                          • Lux
                            ルクス
                            • 24-04-2003
                            • 24465

                            #14
                            Originalmente publicado por Kabronero
                            che lux pero lo tuyo resultaría en algo así (si fuera un array de numeritos como puso cami en el primer post)

                            012<li>3</li>456<li>7</li>8910<li>11</li>12...
                            jauj sh, si, en su momento tenía sentido, bue.

                            Comentario

                            • COMPRO-ORO
                              castlevania
                              • 05-06-2003
                              • 27379

                              #15
                              dejen de postear tanto y escriban codigo, n
                              Lo bueno, si breve ; dos veces bueno

                              Comentario

                              Trabajando...