常見需求:從 admin||46cc468df60c961d8da2326337c7aa58||0,0... 這類字串中,快速取出第一個 || 之前的內容(即 admin)。
<?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
strpos($str, "||") 回傳 || 首次出現的索引位置(此例為 5)。substr($str, 0, 5) 從索引 0 開始,取長度 5 的子字串。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,簡潔且高效。