簡體   English   中英

從第n個字符開始從PHP中剪切字符串

[英]Cut string in PHP at nth-from-end occurrence of character

我有一個可以用多種不同方式編寫的字符串,它將始終遵循相同的模式,但是其長度可以不同。

this/is/the/path/to/my/fileA.php
this/could/also/be/the/path/to/my/fileB.php
another/example/of/a/long/address/which/is/a/path/to/my/fileC.php

我想做的是切斷繩子,這樣我就可以了

path/to/my/file.php

我有一些從此頁面獲取的代碼並將其修改為以下代碼

$max = strlen($full_path);
$n = 0;
for($j=0;$j<$max;$j++){
    if($full_path[$j]=='/'){
        $n++;
        if($n>=3){
            break 1;
        }
    }
}
$path = substr($full_path,$j+1,$max);

它基本上在'/'字符的第三個實例處將其剪切,並提供剩余的內容。 當我在一個環境中工作時,這很好,但是當我將其遷移到另一台服務器時,路徑會更長,因此剪切將使我的地址太長。 我認為與其更改每個實例的硬編碼整數值,不如將它從最后一個實例的第4個開始切掉,這樣會更好,因為我一直想保留最后4個“斜杠”信息

非常感謝

編輯-最終代碼解決方案

$exploded_name = explode('/', $full_path);
$exploded_trimmed = array_slice($exploded_name, -4);
$imploded_name = implode('/', $exploded_trimmed);

只需對字符串使用explode,如果pattern始終相同,則獲取數組的最后一個元素,即可完成工作

$pizza  = "piece1/piece2/piece3/piece4/piece5/piece6";
$pieces = explode("/", $pizza);
echo $pieces[0]; // piece1
echo $pieces[1]; // piece2

然后反轉數組,獲取數組的前四個元素,並使用“爆破”組合它們以獲得所需的字符串

下面的函數可以像第n次出現的substr一樣工作

function substr_after_nth($str, $needle, $key) 
{
    $array = explode($needle, $str);
    $temp = array();
    for ($i = $key; $i < count($array); $i++) {
        $temp[] = $array[$i];
    }
    return implode($needle, $temp);
}

$str = "hello-world-how-are-you-doing";

在第4次出現“-”后進行substr以獲得“您正在做”,將上述函數調用為

echo substr_after_nth($str, "-", 4);

它會導致

you-doing

暫無
暫無

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

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