Как рекурсивно вычесть из массива? - PullRequest
2 голосов
/ 01 февраля 2010

Я извлекаю параметр url и пытаюсь создать из него крошку. Итак, если я потяну:

$url = 'contact/jane/now';

и я делаю:

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

Как я могу поместить это в цикл, чтобы он разбивал каждую часть на путь, подобный этому:

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

Ответы [ 4 ]

4 голосов
/ 01 февраля 2010
$answer = '';
foreach ($path as $path_part){
 $answer .= '/'.$path_part;
 print('<a href="'.$answer.'">'.$path_part.'</a>');
}
2 голосов
/ 01 февраля 2010

до PHP 5.3:

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

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

В PHP 5.3:

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

    return "$a/$b";
});
0 голосов
/ 01 февраля 2010

Вы можете использовать array_slice для этого код на самом деле не проверен, но я надеюсь, что вы поняли

...
$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]);
}
0 голосов
/ 01 февраля 2010

Вы можете использовать для, для каждого, делать, делать, пока. На самом деле все, что вы хотите. http://php.net/manual/en/control-structures.for.php Когда вы взрываетесь, он превращается в массив строк http://us.php.net/manual/en/function.explode.php

Итак, просто используйте метод count () и определите, сколько элементов в массиве http://us.php.net/manual/en/function.count.php

А затем продолжайте, просматривайте и читайте по одному. Если вы хотите начать с последнего, а затем вернуться назад, вы просто измените свой цикл, чтобы начать инициализацию на счетчике массива, а затем каждый раз вычитайте один из своего счетчика. В противном случае, просто сделайте это как обычно.

Yay за просмотр документации по PHP!

...