這裏稍微解釋一下什麼每一步操作:
$subject = 'monkey/rabbit/cat/donkey/duck';
$target = 'cat';
$target_length = strlen($target); // get the length of your target string
$target_index = strpos($subject, $target); // find the position of your target string
$new_length = $target_index + $target_length; // find the length of the new string
$new_subject = substr($subject, 0, $new_length); // trim to the new length using substr
echo $new_subject;
這些都可以合併成一個聲明。
$new_subject = substr($subject, 0, strpos($subject, $target) + strlen($target));
這假設你的目標被找到。如果沒有找到目標,則目標將被修剪到目標的長度,這顯然不是你想要的。例如,如果您的目標字符串爲"fish"
,則新主題將爲"monk"
。這就是爲什麼其他答案會檢查if ($pos !== false) {
。
對您的問題的評論之一提出了一個有效的觀點。如果您搜索恰好包含在其他字符串中的字符串,則可能會收到意想不到的結果。當使用substr
/strpos
方法時,確實沒有一種好方法來避免此問題。如果要確保只匹配分隔符(/
)之間的整個單詞,則可以按/
進行爆炸並在結果數組中搜索目標。
$subject = explode('/', $subject); // convert to array
$index = array_search($target, $subject); // find the target
if ($index !== false) { // if it is found,
$subject = array_slice($subject, 0, $index + 1); // remove the end of the array after it
}
$new_subject = implode('/', $subject); // convert back to string
str_replaces *取代*一條繩子絆倒。嘗試使用strpos來獲取字符串的位置(即cat),然後substr獲取字符串的一部分 –
@JustinJeong謝謝,我會測試它! – Jarla
您可以使用爆炸並通過數組回顯新變量。即$ demosubj = exlpode($ animal,$ subject); echo $ demosubj [0]。$ animal;會得到你的 –