Foros del Web » Programando para Internet » PHP »

Si es el último índice de array, entonces...

Estas en el tema de Si es el último índice de array, entonces... en el foro de PHP en Foros del Web. Hola! Intento crear unos breadcrumbs sencillos. Sé que el código final resultará poco elegante comparado con las clases PHP disponibles en la red, pero no ...
  #1 (permalink)  
Antiguo 08/10/2014, 22:33
Avatar de berkeleyPunk  
Fecha de Ingreso: febrero-2013
Ubicación: México :C
Mensajes: 565
Antigüedad: 11 años, 2 meses
Puntos: 22
Pregunta Si es el último índice de array, entonces...

Hola!

Intento crear unos breadcrumbs sencillos. Sé que el código final resultará poco elegante comparado con las clases PHP disponibles en la red, pero no quiero usar éstas porque deseo entrenar un poquito, .

El script debe devolver algo como: inicio » miga1 » miga2

Código PHP:
function breadcrumbs($migas) {
    
$m      explode('/'$migas);
    
$maximo count($m);
            
    for (
$i=0$i<$maximo$i++) {
        if ( empty(
$m[$i]) ) {
            echo 
"¡Error! No se han declarado los breadcrumbs<br />";
        }
        else {
            echo 
'<i>' $m[$i] . '</i><b> » </b>';
        }
    }
    
// echo $maximo-3;
}
breadcrumbs('musica/generos/power metal/grupos/rhapsody/discos/Symphony of Enchanted Lands'); 
Con esto me daría por bien servido, si no fuera porque al final de los breadcrumbs se imprime el caracter », que no debería aparecer.



Con tal propósito, la idea es que cuando se lea el último índice del array, no se imprima dicho caracter. Algo así:

Código PHP:
function breadcrumbs($migas) {
    
$m      explode('/'$migas);
    
$maximo count($m);
            
    for (
$i=0$i<$maximo$i++) {
        if ( empty(
$m[$i]) ) {
            echo 
"¡Error! No se han declarado los breadcrumbs<br />";
        }
        else {
            if (
key($m[$i]) == $maximo) {
                echo 
'<i>' $m[$i] . '</i>';
            }
            else {
                echo 
'<i>' $m[$i] . '</i><b> » </b>';
            }
        }
    }
    
// echo $maximo-3;
}
breadcrumbs('musica/generos/power metal/grupos/rhapsody/discos/Symphony of Enchanted Lands'); 
Con la función key() se puede leer el número de índice de un array, pero no funciona tal cual lo empleo aquí.

¿Me ayudan?

Saludos!

Última edición por berkeleyPunk; 08/10/2014 a las 22:42
  #2 (permalink)  
Antiguo 08/10/2014, 22:52
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Respuesta: Si es el último índice de array, entonces...

No tiene sentido complicarlo tanto, por la forma en que lo planteas podrias hacer:

Código PHP:
Ver original
  1. <?php
  2. $input = 'musica/generos/power metal/grupos/rhapsody/discos/Symphony of Enchanted Lands';
  3. echo "<i>".str_replace("/", "</i><b> » </b><i>", $input)."</i>";

que es mucho mas rapido y simple, o bien:

Código PHP:
Ver original
  1. <?php
  2. $input = 'musica/generos/power metal/grupos/rhapsody/discos/Symphony of Enchanted Lands';
  3. echo "<i>".implode("</i><b> » </b><i>", explode("/", $input))."</i>";

que es un poco mas complejo, mejor lee el manual y no intentes reinventar la rueda, si quieres entrenarte en php estudia las funciones nativas del lenguaje para hacer las cosas de forma simple y eficiente.
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #3 (permalink)  
Antiguo 09/10/2014, 06:31
Avatar de berkeleyPunk  
Fecha de Ingreso: febrero-2013
Ubicación: México :C
Mensajes: 565
Antigüedad: 11 años, 2 meses
Puntos: 22
De acuerdo Respuesta: Si es el último índice de array, entonces...

Cita:
Iniciado por NSD Ver Mensaje
No tiene sentido complicarlo tanto...
Jajajaja , eso, muy bien NSD , tienes toda la razón, con el str_replace se acaba el problema en 1 línea. Bien hecho!

Sin embargo, ya me quedé con la duda y voy a seguir buscando respuesta el problema inicial. Si puedes, tu respuesta es bienvenida.
  #4 (permalink)  
Antiguo 09/10/2014, 09:05
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Respuesta: Si es el último índice de array, entonces...

Cita:
voy a seguir buscando respuesta el problema inicial.
Como quieras.
Pista 1: No busques el ultimo elemento, busca a todos los que no sean el primero.
Pista 2: Para encontrar a los que no son el primero, encuentra al primero.
Pista 3: El primero es el indice 0 y el 0 es el único numero que se evalúa como falso.
Pista 4: El foreach es mejor para recorrer estructuras iterables como los Arrays que los for comunes.
Pista 5: Array_filter elimina las migas vacías.

Combinando esas 5 pistas puedes allar la solución en solo 2 lineas.
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios

Última edición por NSD; 09/10/2014 a las 09:11

Etiquetas: Ninguno
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 11:14.