2011-06-06 8 views
6

Esto es más una pregunta conceptual sobre la funcionalidad incorporada de PHP y matrices. Me preguntaba si hay alguna forma de hacer lo siguiente:pregunta de matriz de PHP

Tiene una matriz $a y esta matriz contiene 5 elementos (0-4) a los fines de este ejemplo.

¿Hay alguna manera de hacer una nueva matriz, que contendría lo siguiente:

$b[0] = $a[0]; 
    $b[1] = $a[0] + $a[1]; 
    $b[2] = $a[0] + $a[1] + $a[2]; 
    $b[3] = $a[0] + $a[1] + $a[2] + $a[3]; 
    $b[4] = $a[0] + $a[1] + $a[2] + $a[3] + $a[4]; 
    etc.. 

me imagino un ejemplo de su uso sería pan rallado en un sitio web, donde se puede hacer clic en cualquier directorio de las un enlace dado como /dir1/dir2/dir3/dir4

¿Hay algo incorporado en PHP que pueda manejar la construcción de una matriz de esta manera? ¿O ejemplos de una función que maneja esto? O incluso una mejor manera de hacerlo.

Gracias!

EDITAR: ¡Aquí está la solución final a través de la ayuda de ustedes muchachos! Esto construirá el enlace y creará el enlace apropiado para cada directorio/elemento.

//$a is our array 


$max = count($a); 
foreach (range(1,$max) as $count) { 
    $b[] = implode("/", array_slice($a, 0, $count)); 
} 
foreach($b as $c) { 
    $x = explode('/' , $c); 
    $y = array_pop($x); 
    echo "<a href='$c'>".$y."</a>"."/"; 
} 

Respuesta

4

Si lo que desea es las cinco combinaciones como en su ejemplo a continuación:

foreach (range(1,5) as $count) { 
    $b[] = implode("/", array_slice($a, 0, $count)); 
} 
+0

Esto funcionó a la perfección. Acabo de reemplazar '5' con el recuento de la matriz en cuestión, y ahora funciona dinámicamente. –

+0

@Richard: ¡Genial si ayuda! - Por cierto, ahora tienes suficiente reputación como para revocar respuestas. Así que tómese su tiempo para votar las otras respuestas aquí también (muestra aprecio independientemente de si funcionó y garantiza que reciba la mayor cantidad de personas respondiendo para todas sus próximas preguntas). – mario

+0

Gracias Mario, me consiguieron un voto popular! De vuelta atcha. Buena solución también. – Ben

1

Lo mejor será que tenga una función recursiva en ese caso.

$arr = array('dir1', 'dir2', 'dir3', 'dir4', 'dir5'); 

function breadcrumbs($a) 
{ 
    // Remove first value 
    $first = array_shift($a); 

    // Loop through other values 
    foreach ($a as $key => $value) 
    { 
    // Add first to remaining values 
    $a[$key] = $first . '/' . $value; 
    } 

    // Return array 
    return array($first) + breadcrumbs($a); 
} 

No comprobado, pero debería funcionar. Hará que cada valor secuencial contenga los valores anteriores a él en la matriz.

0

Creo, que desea algo como esto:

for($i = 0; $i < count($a); $i++) 
    for($j = 0; $j < i + 1; $j++) 
    $b[i] += $a[j]; 
+2

+ es un operador numérico, no un operador de cadena en PHP. Esto no funcionará Tendría que ser. =, E incluso eso no funcionaría para lo que él pidió. –

1
$b = array(); 

for($i=0;$i<count($a);$i++) { 
    $b[] = array_sum(array_splice($a,0,$i)); 
}