2010-02-01 5 views
2

Je tire le paramètre url et j'essaye de créer un fil d'Ariane. Donc, si je tire:Comment soustraire récursivement d'un tableau?

$url = 'contact/jane/now'; 

et je fais:

$path = explode("/",$url); 

Comment puis-je mettre dans une boucle de sorte qu'il se casse chaque partie dans un chemin comme celui-ci:

<a href="/contact">contact</a> 
<a href="/contact/jane">jane</a> 
<a href="/contact/jane/now">now</a> 

Répondre

4
$answer = ''; 
foreach ($path as $path_part){ 
$answer .= '/'.$path_part; 
print('<a href="'.$answer.'">'.$path_part.'</a>'); 
} 
+0

+1 Simple, clair, direct. – cletus

+0

J'utiliserais '"/$ path_part "' au lieu de ''/'.$ path_part;'. Pareil pour l'impression. Je pense que cela augmente la lisibilité. – LiraNuna

+2

Je préfère utiliser des guillemets simples car cela vous permet de séparer vos littéraux de chaîne de vos variables. Pour moi, c'est plus clair. Je préfère aussi les guillemets simples pour la vitesse. À chacun, je suppose. –

0

Vous pouvez utiliser un pour, pour chaque, faire, faire tout, tandis que. Vraiment tout ce que tu veux. http://php.net/manual/en/control-structures.for.php Lorsque votre exploser, il se transforme en un tableau de chaînes http://us.php.net/manual/en/function.explode.php

Ainsi, il suffit d'utiliser la méthode count() et de déterminer le nombre d'éléments sont dans le tableau http://us.php.net/manual/en/function.count.php

Et puis aller de l'avant et la boucle à travers et lire un à la fois. Si vous voulez commencer par le dernier et ensuite revenir en arrière, vous changez simplement votre boucle pour aller initialiser au compte du tableau puis soustrayez un à chaque fois de votre compteur. Sinon, faites-le comme d'habitude.

Yay pour regarder sur le doc PHP!

0

Vous pouvez utiliser array_slice pour ce le code est pas vraiment testé mais j'espère que vous avez l'idée

... 
$url = explode('/', $url); 
$links = array(); 

for ($i = 0; $i < count($url); $i++) { 
    $crumb = ($i > 0) ? implode('/', array_slice($url, 0, $i)) .'/' : $url[$i] .'/'; 
    $links[] = sprintf('<a href="%s">%s</a>', $crumb . $url[$i], $url[$i]); 
} 
2

Pre PHP 5.3:

array_reduce($path, create_function('$a, $b', ' 
    echo "<a href=\"$a/$b\">$b</a>\n"; 

    return "$a/$b"; 
')); 

En PHP 5.3:

array_reduce($path, function($a, $b) { 
    echo "<a href=\"$a/$b\">$b</a>\n"; 

    return "$a/$b"; 
}); 
+0

J'aime cette réponse. Bon exemple de array_reduce(). –