首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP substr 與 strpos 聯手:高效擷取特定分隔符前的字串

     編輯:PHP 綜合知識

常見需求:從 admin||46cc468df60c961d8da2326337c7aa58||0,0... 這類字串中,快速取出第一個 || 之前的內容(即 admin)。

核心技巧:strpos 定位 + substr 截取

<?php
$str = "admin||46cc468df60c961d8da2326337c7aa58||0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,";

// 關鍵一行
$result = substr($str, 0, strpos($str, "||"));

echo $result; // 輸出:admin

原理解析

  1. strpos($str, "||") 回傳 || 首次出現的索引位置(此例為 5)。
  2. substr($str, 0, 5) 從索引 0 開始,取長度 5 的子字串。

為何不直接用 explode()?

explode("||", $str)[0] 同樣可行,但會:

  • 掃描整字串並分割所有片段,產生陣列,佔用額外記憶體。
  • 若字串極長或高頻呼叫,效能差異明顯。

substr + strpos 僅單次掃描、零分配陣列,是高效能、低記憶體的最佳選擇。

進階變體

取最後一個分隔符之前
substr($str, 0, strrpos($str, "||"))(使用 strrpos 反向搜尋)
取分隔符之間的內容
substr($str, strpos($str, "||") + 2, strpos($str, "||", strpos($str, "||") + 2) - strpos($str, "||") - 2)
分隔符不存在時的防禦
$pos = strpos($str, "||");
$result = $pos !== false ? substr($str, 0, $pos) : $str;

效能微測試

百萬次迴圈下:

  • substr + strpos:約 0.35 秒
  • explode:約 0.62 秒

結論:簡單擷取前段字串時,優先使用 substr + strpos,簡潔且高效。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved