【问题标题】:How to recursively subtract from an array?如何递归地从数组中减去?
【发布时间】:2010-02-01 03:07:26
【问题描述】:

我正在提取 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>

【问题讨论】:

    标签: php arrays breadcrumbs


    【解决方案1】:
    $answer = '';
    foreach ($path as $path_part){
     $answer .= '/'.$path_part;
     print('<a href="'.$answer.'">'.$path_part.'</a>');
    }
    

    【讨论】:

    • 我会使用"/$path_part" 而不是'/'.$path_part;。打印也是一样。我认为它增加了可读性。
    • 我更喜欢使用单引号,因为它可以将字符串文字与变量分开。对我来说,这更清楚。我也更喜欢单引号来提高速度。我猜是他/她自己的。
    • 看...这就是我喜欢这个网站的原因...我如此想太多了,我非常尴尬,现在要睡觉了...谢谢! :)
    【解决方案2】:

    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";
    });
    

    【讨论】:

    • 我喜欢这个答案。 array_reduce() 的好例子。
    【解决方案3】:

    您可以使用 For、For Each、Do、Do While、While。真的随心所欲。 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

    然后继续循环并一次阅读一个。如果您想从最后一个开始然后倒退,您只需更改循环以在数组的计数处进行初始化,然后每次从您的计数器中减去一个。否则,照常进行。

    欢迎查看 PHP 文档!

    【讨论】:

      【解决方案4】:

      你可以使用 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]);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-20
        • 1970-01-01
        • 2016-07-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-16
        • 1970-01-01
        相关资源
        最近更新 更多