在開發中經常需要判斷某個值(如 ID)是否存在於以逗號分隔的字符串中,常見於復選框回顯、權限驗證等場景。本文介紹一種利用 strpos() 函數的高效判斷方法。
修改操作時,需要根據數據庫存儲的 ID 列表(如 '7,8,9')判斷當前遍歷的 ID 是否應被選中。
<?php
// 數據庫存儲的已選 ID 字符串
$checkId = '7,8,9';
// 待判斷的 ID 列表
$idAll = array('1','2','3','5','7','8','9');
// 關鍵技巧:在字符串首尾添加分隔符,避免部分匹配(如 1 匹配到 11)
$checked = ',' . $checkId . ',';
foreach ($idAll as $k => $v) {
// 搜索 ',7,' 這樣的完整模式
if (strpos($checked, ',' . $v . ',') !== FALSE) {
$check = 'checked="checked"';
} else {
$check = '';
}
// 輸出復選框 HTML
echo '<input type="checkbox" name="id[]" value="' . $v . '" ' . $check . '> ' . $v . '<br>';
}
?>
',' . $checkId . ','),確保搜索的是完整 ID,避免 1 錯誤匹配到 11、12 等!== FALSE 而非 == TRUE,因為 strpos() 可能返回 0(匹配位置在開頭),在弱類型比較下 0 == FALSE 為真,會導致邏輯錯誤in_array(explode(',', $str), $val) 更高效,避免了數組拆分開銷function in_csv($needle, $haystack) {
// 判斷 $needle 是否在逗號分隔字符串 $haystack 中
return strpos(',' . $haystack . ',', ',' . $needle . ',') !== FALSE;
}
// 使用示例
$selected = '7,8,9';
if (in_csv('7', $selected)) {
echo 'ID 7 已選中';
}
通過給字符串和搜索值同時添加分隔符,配合 strpos() 的嚴格比較,可以高效、準確地實現「字符在字符串中」的判斷,適用於 ID 列表、標籤列表等逗號分隔場景。