簡體   English   中英

PHP:計算數組項,然后為每個數組項刪除“ ../”

[英]PHP: Count array items and then remove '../' foreach array item

好的,有點難以解釋,但是我想做的是為我的網站創建一個子標題。 子標題將基於當前URL,以sub/test/3rdleveldown/blog/post為例。 我需要子標題要做的是,為該URL的每個級別創建一個單獨的鏈接

示例:這將產生:

 <a href="../../../../sub">Sub</a> >> <a href="../../../test">Test</a> >> <a href="../../3rdleveldown">3rdleveldown</a> >> <a href="blog">blog</a> 

這將允許用戶輕松地降低URL級別。

我設法做到的是

<div class="subheader">
  <?php
  $uri = $_SERVER['REQUEST_URI'];
  $array = explode('/', $uri);
  $count = count($array);
  ?>
  @foreach ($array as $sub)
    <a href="NOW HERE I NEED TO ENTER the ../ based on how far down the link is in the array {{ $sub }}">{{ $sub }}</a> >>
  @endforeach
</div>

有人可以幫助我降低每個級別的../嗎?

應該是這樣的:

<?php

$path="sub/test/3rdleveldown/blog/post";
$arr = explode("/",$path);
array_pop($arr);
$sarr = sizeof($arr);

$count = 0;
$links = Array();

while ($count < $sarr) {
  $myhref = "<a href=\"";
  /*
   This will add the neccessary number of ../
  */
  for($i=1;$i<=($sarr-$count);$i++) $myhref .= "../";
  $myhref .= $arr[$count] . "\">" . ucfirst($arr[$count]) . "</a>";
  echo $myhref;
  array_push($links, $myhref);
  $count++;
}

print_r($links);

?> 

運行此代碼,您將獲得

Array
(
    [0] => <a href="../../../../sub">Sub</a>
    [1] => <a href="../../../test">Test</a>
    [2] => <a href="../../3rdleveldown">3rdleveldown</a>
    [3] => <a href="../blog">Blog</a>
)

我相信這是您所需要的。

想通了,可能有更好的方法可以做到,但這應該可以。

<div class="subheader">
  <?php
  $uri = $_SERVER['REQUEST_URI'];
  $breadcrums = explode('/', $uri);
  array_pop($breadcrums);
  $count = count($breadcrums);
  --$count;
  $crumlevel = '';
  $ocount = $count;
  ?>
  @foreach ($breadcrums as $breadcrum)
  <?php
    for($count; !$count == 0 ; $count--){
      $crumlevel = '../'.$crumlevel;
    }
    $count = --$ocount;

  ?>
    <a href="{{ $crumlevel.$breadcrum }}">{{ $breadcrum }}</a> >>
    <?php $crumlevel = '../' ?>
  @endforeach
</div>

您可以簡單地在$request變量上使用segments方法。

$segments_arr = request()->segments();
// It would give you an array of URL sub-parts as: 
// ['Sub', 'test', '3rdleveldown'];

然后,您可以自己操作該數組。 產生正在使用的鏈接的技巧是一種方法,或者您可以簽出其他Laravel軟件包來創建面包屑。

更新

在遍歷segments數組時,可以使用request的request()->root()創建鏈接。

$root_path = request()->root();
foreach($segments_arr as $segment) {
    $href_str = $root_path . '/' . implode('/', array_slice($segments_arr, 0, $key + 1));
}
/* So for example if your root url is - www.example.com, then
    the output on $key = 0;

    www.example.com/segment1 --- $key = 0
    www.example.com/segment1/segment2 --- $key = 1
*/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM